0
I basically have a complete graph represented as an adjacency list, i have to find between all vertices a path between a specific vertex up to some vertex with interest = 1 where what I want to return is the smallest distance between two vertices followed among all paths, (each path will exist between two vertices at the greatest distance that has to be covered from those maxima I have to return the smallest). The algorithm I made goes through all the paths and returns the desired but it is going into an infinite loop that I do not understand why there is this code:
void acessar_todos(P_grafo grafo, int respostas[3], int indice, int *visitados) { //Não foi usado pois entra em loop infinito mas iria basicamente fazer todos os caminhos e devolver o menor maior caminho
P_no atual = achar_indice(grafo, indice);
if (atual->vertice.interesse == 1) { //Se o elemento atual é o procurado retorna e continua a pesquisa
return;
}
P_no prox = grafo->adjacencia[indice]; //checa os elementos da lista de adjacencia do elemento atual
while (prox != NULL) {
if (visitados[prox->vertice.indice] == 0) {
respostas[0] = ceil(Distancia(atual->vertice.posicao.x, atual->vertice.posicao.y, prox->vertice.posicao.x, prox->vertice.posicao.y)); //Distancia do atual para o proximo
if (respostas[1] < respostas[0]) { //Se a distancia for maior guarda a maior do caminho atual
respostas[1] = respostas[0];
}
if (prox->vertice.interesse == 1) { //Caso chegue no final de um caminho se o meior desse caminho for menor do que o ultimo menor maior guarda esse
if (respostas[1] < respostas[2]) {
respostas[2] = respostas[1];
}
}
if (prox->vertice.interesse == 0) {
visitados[prox->vertice.indice] = 1; //Ele nunca vai entrar para pesquisar a partir do ponto final
}
acessar_todos(grafo, respostas, prox->vertice.indice, visitados);//Acessa o proximo elemento do caminho
}
prox = prox->prox; //Vai para o proximo elemento da lista do elemento atual
}
visitados[atual->vertice.indice] = 0; //Como vai voltar para continuar os acessos marca como se o atual não foi mais visitado
return;
}
responses start with 0, 0, 999999. accessed with all equal to 0 minus the index it starts which is also the index initially passed to function