Верно ли, что реализация BFS, DFS и Dijkstra почти одинакова, за исключением того, что BFS использует очередь, DFS использует стек, а Dijkstra использует очередь с минимальным приоритетом?
Точнее. Можем ли мы использовать следующий код для всех BFS, DFS и Dijkstra, причем Q является очередью для BFS, а стек для DFS и мини-приоритетной очереди для Dijkstra? Спасибо!
Init d[]=Inf; // distance from the node s
Init c[]='w'; // color of nodes: 'w':undiscovered, 'g':discovered, 'b':fully explored
Init p[]=null; // previous node in the path
c[s]='g';
d[s]=0;
Q.push(s);
while(!Q.empty()) {
u = Q.front();
Q.pop();
for v in adj[u] {
if(c(v)=='w') {
c[v]='g';
if(d[u]+w(u,v)<d[v]) {
d[v]=d[u]+w(u,v);
p[v]=u;
}
Q.push(v);
}
}
c[u]='b';
}