使用邻接矩阵或者邻接表创建一个图,并对这个图进行深度优先遍历和广度优先遍历。用c++编写代码
时间: 2024-02-09 22:12:19 浏览: 88
C++邻接矩阵的深度、广度优先遍历
5星 · 资源好评率100%
好的,下面是使用邻接矩阵或邻接表创建一个图,并对这个图进行深度优先遍历和广度优先遍历的 C++ 代码示例(使用邻接表表示):
```c++
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
// 定义邻接表
vector<int> adj_list[100];
// 深度优先遍历
void dfs(int node, bool visited[]) {
visited[node] = true;
cout << node << " ";
for (int i = 0; i < adj_list[node].size(); i++) {
int neighbor = adj_list[node][i];
if (!visited[neighbor]) {
dfs(neighbor, visited);
}
}
}
// 广度优先遍历
void bfs(int start) {
bool visited[100] = {false};
queue<int> q;
q.push(start);
visited[start] = true;
while (!q.empty()) {
int node = q.front();
q.pop();
cout << node << " ";
for (int i = 0; i < adj_list[node].size(); i++) {
int neighbor = adj_list[node][i];
if (!visited[neighbor]) {
visited[neighbor] = true;
q.push(neighbor);
}
}
}
}
int main() {
// 添加边
adj_list[0].push_back(1);
adj_list[0].push_back(2);
adj_list[1].push_back(0);
adj_list[1].push_back(2);
adj_list[2].push_back(0);
adj_list[2].push_back(1);
adj_list[2].push_back(3);
adj_list[3].push_back(2);
adj_list[3].push_back(4);
adj_list[4].push_back(3);
// 深度优先遍历
bool visited1[100] = {false};
dfs(0, visited1);
cout << endl;
// 广度优先遍历
bfs(0);
return 0;
}
```
输出结果为:
```
0 1 2 3 4
0 1 2 3 4
```
注意,深度优先遍历和广度优先遍历的时间复杂度都是 O(n+m),其中 n 表示节点的数量,m 表示边的数量。
阅读全文