diff --git a/homework5/MatrixGraph.h b/homework5/MatrixGraph.h index 2840b0c..f0fcd6e 100644 --- a/homework5/MatrixGraph.h +++ b/homework5/MatrixGraph.h @@ -5,6 +5,7 @@ #ifndef MATRIXGRAPH_H #define MATRIXGRAPH_H +#include #include #include @@ -48,7 +49,7 @@ public: // 连接顶点 void connect(int id1, int id2, T weight = 0) { - if (id1 > data.size() || id2 > data.size() || (id1 < 0 || id2 < 0)) { + if (id1 >= data.size() || id2 >= data.size() || (id1 < 0 || id2 < 0)) { throw NodeIdOutOfRangeException("您提供的id不合理", 0X001); } if (id1 == id2) { @@ -97,5 +98,28 @@ public: } return ss.str(); } + + vector DFS(int startID) { + if (startID >= matrix.size() || startID < 0) { + throw NodeIdOutOfRangeException("您提供的id不合理", 0X004); + } + vector visited(matrix.size(), false); //访问标记 + vector result; + + function dfsHelper = [&](int node) { + visited[node] = true; + result.push_back(data.at(node)); + + for (int i = 0; i < matrix[node].size(); ++i) { + if (matrix[node][i].connected && !visited[i]) { + dfsHelper(i); + } + } + }; + + dfsHelper(startID); + + return result; + } }; #endif //MATRIXGRAPH_H diff --git a/homework5/test1.cpp b/homework5/test1.cpp index e8f9361..4f6f801 100644 --- a/homework5/test1.cpp +++ b/homework5/test1.cpp @@ -26,7 +26,7 @@ using namespace std; int main() { - MatrixGraph graph = new MatrixGraph(); + MatrixGraph graph = MatrixGraph(); int n, e; cin >> n >> e; for (int i = 0; i < n; i++) { @@ -39,5 +39,12 @@ int main() { } cout << "图的邻接矩阵为:" << endl; cout << graph.to_string() << endl; + vector dfs = graph.DFS(0); + cout << "图的DFS序列为:" << endl; + vector::iterator it; + for (it = dfs.begin(); it != dfs.end(); it++) { + cout << *it << " "; + } + cout << endl; return 0; } diff --git a/homework5/test2.cpp b/homework5/test2.cpp index 4f34338..b678b8c 100644 --- a/homework5/test2.cpp +++ b/homework5/test2.cpp @@ -27,25 +27,25 @@ using namespace std; int main() { - ListGraph graph=ListGraph(); - int n,e; - cin>>n>>e; - for(int i=0;i graph = ListGraph(); + int n, e; + cin >> n >> e; + for (int i = 0; i < n; i++) { graph.insert(i); } - int id1,id2; - for(int i=0;i>id1>>id2; - graph.connect(id1,id2); + int id1, id2; + for (int i = 0; i < e; i++) { + cin >> id1 >> id2; + graph.connect(id1, id2); } - cout<<"邻接表:"< bfs=graph.BFS(0); + cout << "邻接表:" << endl; + cout << graph.to_string() << endl; + cout << "BFS序列:" << endl; + vector bfs = graph.BFS(0); vector::iterator it; - for(it=bfs.begin();it!=bfs.end();++it) { - cout<<*it<<" "; + for (it = bfs.begin(); it != bfs.end(); ++it) { + cout << *it << " "; } - cout<