Venía así definida.
Muchas gracias ya me han ayudado
Muchas gracias ya me han ayudado
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menúdata Grafo a = GVacio | Nodo a (Grafo a) | Arco a a (Grafo a) deriving (Show, Eq)
adyacentes :: (Eq a) => a -> a -> Grafo a -> Bool
adyacentes x y (Arco u v g) = x==u && y==v || x==v && y==u || adyacentes x y g
adyacentes _ _ _ = False
noadylista :: (Eq a) => Grafo a -> a -> [a]
noadylista GVacio _ = []
noadylista (Arco x y g) a = if ((adyacentes a x g))
then (noadylista (Nodo y g) a)
else x:(noadylista (Nodo y g) a)
#include <stdio.h>
#include <math.h>
#define length(x) (sizeof(x)/sizeof(x[0]))
static int V[]={1,2,3,4},aux[]={0,0,0,0},ex[]={}; //ex: vector que contiene al ultimo elemento expandido
//aux: deberia contener los elementos del subconjunto al que se le debe aplicar la funcion suma
int factorial(int M){
int num=M;
int factor = 1;
while (num > 0){
factor = num * factor;
num--;
}
return factor;
}
int suma(){
int sum=0,j=0;
while (j<length(aux)){
sum=sum+aux[j];
j++;
}
return sum;
}
int main() {
int S=5,i=0,T=0,cont=0,j,b=0,ncomb=0,k,v;
int nc[]={0,0,0,0}; //vector que contiene el numero de combinaciones para subconjuntos de 1,2,3 y 4 elementos
for (k=1;k<=length(V);k++){
ncomb=factorial(length(V))/(factorial(k)*factorial(length(V)-k));
printf("Numero de combinaciones con %d elementos: %d\n",k,ncomb);
nc[k-1]=ncomb;
}
do{
v=length(V);
if(T>v || suma()>S){ //Nodo fracaso
aux[i]=0;
i--;
T--;
nc[k]=nc[k-1];
}
else if(suma()==S){ // nodo solución
cont++;
aux[i]=0;
i--;
T--;
nc[k]=nc[k-1];
}
if(suma()<S) //nodo problema
{
T++;
i++;
}
if(i==1 && aux[0]==V[length(V)-1]){ //Nodo solucion
printf("Nº de soluciones %d\n",cont);
b=1;
exit(1);
}
ex[i]=V[i];
for(j=0;j<i;j++){
aux[j]=V[j];
aux[i-1]=ex[i+1]++;
}
}while(b==0);
}