Ich versuche, eine BFS-Struktur mit C++ - Code zu erstellen. Ich bin ziemlich sicher, dass mein Code funktioniert, aber jedes Mal, wenn ich versuche, den booleschen Wert von 'explored' auf 'true' (in der letzten if-Anweisung des Codes) zu ändern, um einen Knoten als besucht zu markieren, wird er wieder in false geändert nächste Schleife der Funktion. Ich habe unten meine BFS-Funktion gepostet. Wenn mir jemand genau erklären könnte, warum der Wert sich immer wieder auf "false" ändert, wäre das sehr hilfreich, da ich nicht ganz sicher bin, was schief läuft.Bool-Wert geändert, aber es ändert sich während der nächsten Schleife der while-Anweisung
void BFS(int s,int n, vector<vector<int> > node_list) {
queue<int> Q;
bool *explored = new bool[n+1];// it Keeps track of explored vertices
for (int i = 1; i <= n; ++i)// Initialization of all vertices as unexplored
explored[i] = false;
Q.push(s);// Pushing of initial vertex to the queue
explored[s] = true; // marking it as explored
cout << "Breadth first Search starting from vertex ";
cout << s << " : " << endl;
while (!Q.empty()) {
int v = Q.front();
Q.pop();
cout << v << " ";
cout << explored[1]<<explored[2]<<explored[3]<<explored[4]<<endl;
vector<int> current_list = node_list[v-1];
for (int i = 0;i<current_list.size();i++){
for (int w = 1; w <= n; ++w){
if ((w == current_list[i]) && (explored[w] != true)) {
cout << "in if: "<< w<<", "<<explored[w]<< endl;
Q.push(w);
explored[w] = true;
}
}
}
cout << endl;
delete [] explored;
}
}
Sie haben 3 verschachtelte Schleifen. Können Sie darauf hinweisen, welche davon die "nächste Schleife" ist? Zeigen Sie idealerweise auch ein minimales vollständiges Beispiel mit einer Ausgabe, die das Problem tatsächlich veranschaulicht. Ich kann diese eine Funktion nicht kompilieren, um das Problem zu reproduzieren. – Useless
Etwas außer Thema, aber Sie lesen nur von 'node_list', aber Sie nehmen es nach Wert (so kopiert es einen Vektor von Vektoren ... autsch). –
Ein weiteres Problem ist im Allgemeinen, dass das Mischen der 1-basierten Array-Verarbeitung mit der 0-basierten Verarbeitung ein Rezept dafür ist, dass irgendwann einmal ein Fehler von 1 auftritt. In C++ beginnen Arrays/Puffer bei 0, nicht bei 1. Wenn ich einen Dollar für jedes Mal hätte, wenn jemand versucht, die 1-basierte Verarbeitung zu fälschen und dann einen Fehler nach dem anderen zu haben, wäre ich ein reicher Mann. – PaulMcKenzie