gpt4 book ai didi

c - 禁忌搜索算法总是在第二次迭代时崩溃

转载 作者:行者123 更新时间:2023-11-30 19:51:20 25 4
gpt4 key购买 nike

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 中的所有信息功能。我找不到这段代码有什么问题,它总是在第二次迭代时崩溃......

最佳答案

for(i=1; i<objs; i++){
temp->next = malloc(sizeof(lista));
}
temp->next = NULL;

您所做的是为 objs 分配内存数量lista并丢失了所有这些的链接,因为你总是在创建 temp->next指向一个新的内存,然后将其指向 NULL .您需要维护一个head为所有节点分配内存时的列表。

lista *solucoes, *temp;//solucoes will act as head of list    
temp = NULL;
solucoes = NULL;

for(i=1; i<objs; i++)
{
if(solucoes==NULL)
{
temp = malloc(sizeof(lista));
solucoes = temp;
}
else
{
temp->next = malloc(sizeof(lista));
temp = temp->next;
}
}
temp->next = NULL;

关于c - 禁忌搜索算法总是在第二次迭代时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46157051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com