c - 我的程序在部分代码中自行停止。如何解决?
问题描述
我正在做一个验证树中循环的程序。小数据没问题,但是当数据增加时,它会停止。请帮帮我。
Cromosoma *kruskalModificado(Gen *setGenes, int numGenes, int numVertices, Cromosoma *cromosoma){
int **matrizAux=NULL;
matrizAux=inicializarMatriz(matrizAux,numVertices);
int *posicionesFinales=(int *) calloc(numVertices,sizeof(*posicionesFinales));
int *vecGenes=(int*) calloc(numVertices,sizeof(*vecGenes));
int listo;
int indiceRandom,elegidos=0;
while(elegidos<numVertices-1){//Itero hasta que todos los vertices hayan sido agregados al arbol
indiceRandom=rand()%numGenes;//Indice aleatorio de mi conjunto de genes
if(vecGenes[indiceRandom]==1)
continue;
vecGenes[indiceRandom]=1;
Gen genAux=setGenes[indiceRandom];//Obtengo el gen
//Verifico que vertice aun no ha sido agregado y lo agrego a mi conjunto de componentes.
listo=1;
int *visitados=(int *) calloc(numVertices,sizeof(*visitados));
valido(matrizAux,numVertices,genAux.v1,genAux.v2,&listo,visitados);
free(visitados);
printf("Aqui\n");
if(listo==0)
continue;
(*cromosoma).genes[(*cromosoma).numGenes]=genAux;
(*cromosoma).numGenes++;
(*cromosoma).fitnessValue+=genAux.peso;
elegidos++;
matrizAux[genAux.v1][posicionesFinales[genAux.v1]]=genAux.v2;
matrizAux[genAux.v2][posicionesFinales[genAux.v2]]=genAux.v1;
posicionesFinales[genAux.v1]++;
posicionesFinales[genAux.v2]++;
}
free(posicionesFinales);
free(vecGenes);
for(int i=0 ; i < numVertices; i ++)
free(matrizAux[i]);
return (Cromosoma *)cromosoma;
}
这里是另一部分代码。
void valido(int **matriz, int numVertices, int genInicial, int genFinal,int *listo, int *visitados){
if(genInicial==genFinal){
(*listo)=0;
return ;
}
int j=0;
visitados[genInicial]=1;
while(matriz[genInicial][j]!=-1 && j<numVertices &&(*listo)==1){
if(visitados[matriz[genInicial][j]]==0){
valido(matriz,numVertices,matriz[genInicial][j],genFinal,listo,visitados);
}
j++;
}
return ;
}
Valido 函数帮助我检测给定边缘中的循环。
解决方案
在 int vecGenes=(int) calloc(numVertices,sizeof(*vecGenes)); .. 不是 numVertices,而是 numGenes。
推荐阅读
- php - 对松散连接的数据进行排序,让人联想到单链表
- odoo-12 - 无法在odoo中确认销售订单
- php - 如何从 Microsoft Graph API 获取刷新令牌
- ios - PHAsset Null 但本地标识符有效
- java - 如何检查 Currency.getAvailableCurrencies() 是否包含我的字符串值?
- java - 怎么会有 reflect.field 库中一个 Field 的值?
- javascript - 在继续执行脚本之前获取函数的结果
- excel - Power Query:合并一个文件中的两个表并为一个文件夹中的所有文件重复过程?
- python - Why is python interpreter not working on Zeppelin 0.8.0 for any of my notebooks?
- javascript - 单击按钮侦听器后如何调用预加载?