SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: oscarreyesavila en Martes 9 de Abril de 2019, 21:55
-
Hola amigos, estoy realizando un código de búsqueda de local, y consiste :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct vecinos{
int* vecino;
};
typedef struct vecinos Vecinos;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int* asigsol(int);
void impsol(int*,int);
Vecinos* asigvecinos(void);
int fitness(int *,int );
int fitnessVecinos(int *,int );
void crearVecinos(int,int,int,int,int,int[],int,int);
void burbuja(int arreglo[],int TAM);
int main(int argc, char *argv[]) {
int i=1,n;
int * solucion;
Vecinos vecinos[5];
int f=0,ite;
printf("size of the array solution");
scanf("%d",&n);
solucion=asigsol(n);
printf("solucion innicial");
printf("\n");
impsol(solucion,n);
printf("\n------------------------");
crearVecinos(*(solucion+0),*(solucion+1),*(solucion+2),*(solucion+3),*(solucion+4),solucion,n,i);
/*
vecinos[0].vecino=malloc(3*sizeof(int));
vecinos[0].vecino[0]=1;
vecinos[0].vecino[1]=2;
vecinos[0].vecino[2]=3;
for(i=0;i<3;i++){
printf("%d",vecinos[0].vecino);
}
*/
free(solucion);
return 0;
}
int* asigsol(int n){
int x;
int * vecino=malloc(n*sizeof(int));
srand(time(0));
for(x=0;x<n;x++){
*(vecino+x)=(rand()%9)+10;//se genera el número aleatorio entre 0 y 29
}//for
return vecino;
free(vecino);
}
void impsol(int* solucion,int n){
int i;
for(i=0;i<n;i++){
printf("VECINOS[%d]=%d",i,solucion);
printf("\n");
}
}
Vecinos* asigvecinos(void){
Vecinos* vecinos=malloc(5*sizeof(Vecinos));
return vecinos;
}
int fitness(int * arreglo,int n){
int i,r=0,R=0;
for(i=0;i<n;i++){
r=*(arreglo+i) * *(arreglo+i);
R+=r;
}
return R;
}
int fitnessVecinos(int * arreglo,int n ){
int i,r=0,R=0;
for(i=0;i<n;i++){
r=*(arreglo+i) * *(arreglo+i);
R+=r;
}
return R;
}
void crearVecinos(int a,int b,int c,int d,int e,int Fit[],int n,int i){
int x,j,l;
int Fits=0;
int A=0,B=0,C=0,D=0,E=0;
Vecinos vecinos[5];
for(x=0;x<5;x++){
vecinos- .vecino=malloc(6*sizeof(int));
}
srand(time(0));
for(x=0;x<5;x++){
for(j=0;j<5;j++){
vecinos- .vecino[j]=(rand()%9)+10;
}
}
vecinos[0].vecino[5]=a;
vecinos[1].vecino[5]=b;
vecinos[2].vecino[5]=c;
vecinos[3].vecino[5]=d;
vecinos[4].vecino[5]=e;
for(l=0;l<5;l++){
impsol(vecinos[l].vecino,6);
printf("\n");
}
Fits=fitness(Fit,n);
A=fitnessVecinos(vecinos[0].vecino,6);
B=fitnessVecinos(vecinos[1].vecino,6);
C=fitnessVecinos(vecinos[2].vecino,6);
D=fitnessVecinos(vecinos[3].vecino,6);
E=fitnessVecinos(vecinos[4].vecino,6);
printf("%d",A);
printf("\n");
printf("%d",B);printf("\n");
printf("%d",C);printf("\n");
printf("%d",D);printf("\n");
printf("%d",E);printf("\n");
printf("%d",Fits);printf("\n");
int arreglo[6]={A,B,C,D,E,Fits};
burbuja(arreglo,6);
printf("ORdebado-----------------\n");
impsol(arreglo,6);
printf("-----------------\n");
while(i<6){
if(Fits==arreglo[0]){
printf("fits\n");
i++;
crearVecinos(Fit[0],Fit[1],Fit[2],Fit[3],Fit[4],Fit,n,i);
}else{
if(arreglo[0]==A){
printf("A");
i++;
crearVecinos(vecinos[0].vecino[0],vecinos[0].vecino[1],vecinos[0].vecino[2],vecinos[0].vecino[3],vecinos[0].vecino[4],vecinos[0].vecino,6,i);
}
if(arreglo[0]==B){
printf("B");
i++;
crearVecinos(vecinos[1].vecino[0],vecinos[1].vecino[1],vecinos[1].vecino[2],vecinos[1].vecino[3],vecinos[1].vecino[4],vecinos[1].vecino,6,i);
}
if(arreglo[0]==C){
printf("C");
i++;
crearVecinos(vecinos[2].vecino[0],vecinos[2].vecino[1],vecinos[2].vecino[2],vecinos[2].vecino[3],vecinos[2].vecino[4],vecinos[2].vecino,6,i);
}
if(arreglo[0]==D){
printf("D");
i++;
crearVecinos(vecinos[3].vecino[0],vecinos[3].vecino[1],vecinos[3].vecino[2],vecinos[3].vecino[3],vecinos[3].vecino[4],vecinos[3].vecino,6,i);
}
if(arreglo[0]==E){
printf("E");
i++;
crearVecinos(vecinos[4].vecino[0],vecinos[4].vecino[1],vecinos[4].vecino[2],vecinos[4].vecino[3],vecinos[4].vecino[4],vecinos[4].vecino,6,i);
}
}
}
}
void burbuja(int lista[],int TAM){
int i,j,temp;
for (i=1;i<TAM;i++)
{
for (j=0;j<TAM-1;j++)
{
if (lista[j] > lista[j+1]) //condicion
{
temp = lista[j]; //temp guarda momentaneamente el valor de lista[j]
lista[j]=lista[j+1]; //Asigno al la posicion lista[j], lo que hay en lista[j+1]
lista[j+1]=temp; //obtendra un nuevo valor por parte de temp.
}
}
}
}
Alguien puede ayudarme en mi funcion crearvecinos, por que cuando entra en el ciclo while me arroja valores raros ,o tengo que liberar memoria,por que me sale otra cosa.