I’m going into an infinite loop but I can’t find the reason why

Asked

Viewed 43 times

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

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.