undirected graph - print all path between src and dst
-
Hallo,
ich moechte alle pfade zwischen src and dst in einem undirekten graph ausgeben. ich habe versucht dfs zu adaptieren...leider noch mit einem bug, den ich nicht finden kann...kann mir jemand den algo erklaeren?
#include <iostream> #include <vector> using namespace std; class Graph { public: Graph(int n) : g(n), visit(n, false) {} void add(int from, int to) { g[from].push_back(to); g[to].push_back(from); } void print_path() const { for (int i=0; i< path.size(); ++i) cout << path[i] << ' '; cout << endl; } void traverse(int source, int dest) { fill(visit.begin(), visit.end(), false); DFS(source, dest); } private: void DFS(int u, int dest) { if (u == dest) { print_path(); return; } visit[u] = true; for (auto v : g[u] ) { path.push_back(v); if (!visit[v]) DFS(v, dest); visit[u] = false; path.pop_back(); } } vector<vector<int> > g; vector<bool> visit; vector<int> path; }; int main() { // your code goes here Graph g(8); g.add(0, 7); g.add(0, 4); g.add(1, 2); g.add(1, 7); g.add(2, 7); g.add(2, 1); g.add(2, 5); // no node with 3 g.add(4, 0); g.add(4, 5); g.add(4, 6); g.add(5, 4); g.add(5, 2); g.add(5, 6); g.add(6, 4); g.add(6, 5); g.add(7, 2); g.add(7, 1); g.add(7, 0); g.traverse(0, 6); return 0; }
-
ich moechte alle pfade zwischen src and dst in einem undirekten graph ausgeben
Es gibt manchmal unendlich viele.
-
Wenn du eine loop hast dann ja! Wie kann ich dfs hin biegen?
-
Es gibt immer dann unendlich viele, wenn der Graph mindestens eine Kante hat.
A-BWege:
A-B
A-B-A-B
A-B-A-B-A-B
...
-
fuer denn fall habe ich ja ein visited array wo alle nodes true gesetzt sind die bisher besucht worden sind...
-
Ich spreche uebrigens von simple paths! Bitte um feedback zu meinem dfs algo!
-
Für mein Dafürhalten steht das "visit[u] = false" in der falschen Zeile.