Если вы начнете отлаживать свой код, вы увидите, что одна из проблем заключается в том, что узлы не выталкиваются перед циклом на соседних узлах , так что, в конце концов, алгоритм снова запускается на них,и некоторые узлы выталкиваются до того, как алгоритм запускается на них.
Я также не понимаю строку for (j=1; j<=adj[u][0]; j++)
, которая зацикливается на смежных вершинах.
Реализация алгоритмов BFS из cp-алгоритмы :
vector<vector<int>> adj; // adjacency list representation
int n; // number of nodes
int s; // source vertex
queue<int> q;
vector<bool> used(n);
vector<int> d(n), p(n);
q.push(s);
used[s] = true;
p[s] = -1;
while (!q.empty()) {
int v = q.front();
q.pop(); // The node should be poped before looping on it's adjacent nodes
for (int u : adj[v]) {
if (!used[u]) {
used[u] = true;
q.push(u);
d[u] = d[v] + 1;
p[u] = v;
}
}
}
А затем, скажем, мы хотим напечатать кратчайший путь:
if (!used[u]) {
cout << "No path!";
} else {
vector<int> path;
for (int v = u; v != -1; v = p[v])
path.push_back(v);
reverse(path.begin(), path.end());
cout << "Path: ";
for (int v : path)
cout << v << " ";
}