typedef struct{
int *sols;
int rest;
int fitness;
int num;
struct lista* next;
}lista;
lista* gere_lista(lista *solucoes, int *sol, int *grafo, int objs, int rests){
int i;
int *nova_sol;
lista *temp = solucoes;
nova_sol = malloc(sizeof(int)*objs);
nova_sol = update_sol(sol, nova_sol, objs);
for(i=0; i<objs; i++){
nova_sol = gera_vizinho3(nova_sol, i);
temp->sols = malloc(sizeof(int)*objs);
temp->sols = update_sol(nova_sol, temp->sols, objs);
temp->rest = calcula_restricoes(nova_sol, grafo, objs, rests);
temp->fitness = calcula_max(nova_sol, grafo, objs);
temp->num = i;
temp = temp->next;
}
return solucoes;
}
int* pesquisa_tabu(int sol[], int *grafo, int objs, int rests, int num_iter){
int fitness, fitness_viz, i, memoria[objs*2/8];
lista *solucoes, *temp;
solucoes = malloc(sizeof(lista));
temp = solucoes;
for(i=1; i<objs; i++){
temp->next = malloc(sizeof(lista));
}
temp->next = NULL;
solucoes = gere_lista(solucoes, sol, grafo, objs, rests);
return sol;
}
我正在嘗試爲我的學校作業做一個禁忌搜索算法,但它並不真正起作用。 這段代碼應該創建一個與pesquisa_tabu函數中的對象具有相同鏈接數量的鏈接列表,然後它會在鄰居中生成相同的數字,併爲每個鏈接添加一個鄰居,然後處理所有的信息pesquisa_tabu功能。 ,我不能找到什麼是錯在此代碼,它總是崩潰的第二次迭代...禁忌搜索算法總是在第二次迭代崩潰
您的循環是錯誤的,你只是分配內存以相同的TEMP->未來一遍又一遍,然後將其設置爲null之後 – Tyler
_Questions尋求幫助調試(爲什麼不是這個代碼工作?)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建[mcve] ._ –