c++图的深度优先遍历算法
时间: 2023-12-17 15:27:57 浏览: 92
以下是C++图的深度优先遍历算法的示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MAXN = 1000; // 最大结点数
vector<int> node[MAXN]; // 存储结点关系
int vist[MAXN]; // 标记结点是否被遍历过
void dfs(int nd) {
if(vist[nd]==0) {
cout<<nd<<" "; // 输出遍历到的结点
vist[nd]=1; // 标记结点已被遍历
}
for(int i=0;i<node[nd].size();i++) {
if(vist[node[nd][i]]==0) dfs(node[nd][i]); // 遍历与该结点有关系的结点
}
}
void dfs_all(int wi) {
for(int i=0;i<wi;i++) {
if(vist[i]==0) dfs(i); // 遍历所有未被遍历的结点
}
}
int main() {
int wi,ma;
cin>>wi>>ma; // wi为结点数,ma为边数
for(int i=0;i<ma;i++) {
int a,b;
cin>>a>>b; // 读入结点关系
node[a].push_back(b); // 存储结点关系
}
for(int i=0;i<wi;i++) {
if(!node[i].empty()) sort(node[i].begin(),node[i].end()); // 对每个结点的关系结点进行排序
}
dfs_all(wi); // 遍历所有结点
return 0;
}
```
阅读全文