算法 第四版 图论 深度搜索来循迹 (C++)
注意点:栈中,pop()无返回值,只是单纯将栈顶元素弹出;返回栈顶元素用top();
1 #include <iostream>
2 #include <stack>
3 #include <forward_list>
4 #include <vector>
5 #include <iterator>
6
7 #define MAX_S 100
8 using namespace std;
9
10 class Graph{
11 int v;
12 int e;
13 vector<forward_list<int>> adjt;
14
15 public:
16 //两个构造函数
17 Graph(int V ): v(V){
18 e = 0;
19 vector<forward_list<int>> adjt1(MAX_S);
20 adjt = adjt1;
21 }
22
23 Graph(int V,int E): v(V), e(E)
24 {
25 vector<forward_list<int>> adjt1(MAX_S);
26 adjt = adjt1;
27
28 for (int i = 0; i < e; ++i)
29 {
30 int v, w;
31 cin >> v >> w;
32 addEdge(v,w);
1,1 Top
94
95 };
96
97 int main()
98 {
99 int v, e;
100 cout << "Please enter two integer to vertices and edges: " ;
101 cin >> v >> e;
102 Graph G(v, e);
103
104 int s;
105 cout << "Please enter a integer to source vertices: ";
106 cin >> s;
107 DepthFirstPaths Paths(G, s);
108
109 for (int i = 0; i < G.V(); ++i)
110 {
111 if (Paths.hasPathTo(i))
112 {
113 cout << s << " to " << i << ": ";
114 stack<int> path = Paths.pathTo(i);
115 int size = path.size();
116 for (int i = 0; i < size; ++i)
117 {
118 cout << path.top() <<" " ;
119 path.pop();
120 }
121 cout << endl;
122 }
123 }
124 }
125