Я пытаюсь отладить алгоритм bfs, используя смежный список. Он будет правильно печатать до определенной точки, а затем переходит в бесконечный цикл. Я сделал несколько распечаток и заметил, что он в конце концов перебирает первые два узла графика. Я не уверен, где в моем коде, который вызывает эту проблему. Это назначение, которое я получил, и это мое последнее средство. Если кто-то может указать мне в правильном направлении относительно того, что может быть проблемой, это поможет.
void bfsList(linkedList adjList[], int visit[], int j){
Queue queue(24);
if (visit[j] == 0){
cout << j+1 << endl;
visit[j] = 1;
queue.enqueue(j);
while(!queue.isEmpty()){
int k = queue.dequeue();
//queue.print();
for(int i=0;i<adjList[k].len();i++){
if (visit[adjList[k].elementAt(i)-1]==0){
cout << adjList[k].elementAt(i) << endl;
visit[adjList[k].elementAt(i)-1] = 1;
}
if (!queue.isFull()){
queue.enqueue(adjList[k].elementAt(i)-1);
}
}
}
}
}
Enqueue только если узел не посещен.
if (visit[adjList[k].elementAt(i)-1]==0){
cout << adjList[k].elementAt(i) << endl;
visit[adjList[k].elementAt(i)-1] = 1;
if (!queue.isFull()){
queue.enqueue(adjList[k].elementAt(i)-1);
}
}
queue.enqueue(adjList[k].elementAt(i)-1);
зависит от того, был ли узел посещен. непроверенные:
if (!queue.isFull() && !visit[adjList[k].elementAt(i)-1]){
queue.enqueue(adjList[k].elementAt(i)-1);
}