Как я могу отсортировать граф, реализованный со списком смежности в C ++? - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь отсортировать его каждый раз, когда добавляю вершину, поэтому я хочу сравнить добавленную вершину с предыдущей, помещая более высокую влево, пока не получу указатель на головную вершину.

Проблема, которая у меня есть, заключается в том, что функция, которая мне нужна для сортировки графа по какой-то вершине, немного работает и после нее останавливается в какой-то момент, но я не могу понять, где проблема, и компилятор не возвращает любая ошибка.

Это моя функция для сортировки каждый раз, когда я добавляю новую вершину.

void Graph::sortGraph(Vertex *pVertex){

/*
* Sort a vertex when it is insert into the graph
* Sorts it from highest to lowest
*/
while(pVertex->previous != NULL){ //Stops when the Vertex is sorted
        if(pVertex->power > pVertex->previous->power){ // To order the graph from highest to lowest
            if(pVertex->previous->previous == NULL){//If it is in position 1 and to
                graphHead = pVertex;
                pVertex->previous->next = pVertex->next;
                pVertex->next->previous = pVertex->previous;
                pVertex->next = pVertex->previous;
                pVertex->previous->previous = pVertex;
                pVertex->previous = pVertex->previous->previous;

            }
            else{ //in any other positions
                pVertex->previous->previous->next == pVertex;
                pVertex->next = pVertex->previous;
                pVertex->previous->previous = pVertex; 
                pVertex->previous->next = pVertex->next;
                pVertex->previous = pVertex->previous->previous;
            }

        } 
        pVertex = pVertex->previous; //go backwards because it have to compare the added vertex and the last one 
}

}

1 Ответ

0 голосов
/ 08 мая 2020

Это кажется неправильным:

            pVertex->previous->previous = pVertex;
            pVertex->previous = pVertex->previous->previous;

вы устанавливаете pVertex-> previous-> previous в pVertex, затем вы устанавливаете pVertex-> previous в pVertex-> previous-> previous, то есть сам pVertex, поэтому pVertex -> предыдущий - это pVertex, кажется, вы создаете al oop, но, может быть, я что-то пропустил.

...