请用C++写一个图的深度和广度遍历,要求图通过键盘输入,显示运行结果
时间: 2024-05-06 10:15:24 浏览: 68
以下是使用邻接矩阵表示的图的深度和广度遍历的C++代码,包含键盘输入和运行结果的显示:
```c++
#include <iostream>
#include <queue>
using namespace std;
const int MAXN = 100; // 最大顶点数
bool visited[MAXN]; // 标记顶点是否已经被访问过
// 邻接矩阵表示的图
struct Graph {
int n; // 顶点数
int e; // 边数
int adj[MAXN][MAXN]; // 邻接矩阵
} G;
// 深度优先遍历
void dfs(int i) {
visited[i] = true;
cout << i << " ";
for (int j = 0; j < G.n; j++) {
if (G.adj[i][j] && !visited[j]) {
dfs(j);
}
}
}
// 广度优先遍历
void bfs(int i) {
queue<int> q;
q.push(i);
visited[i] = true;
while (!q.empty()) {
int u = q.front();
q.pop();
cout << u << " ";
for (int v = 0; v < G.n; v++) {
if (G.adj[u][v] && !visited[v]) {
visited[v] = true;
q.push(v);
}
}
}
}
int main() {
cout << "请输入顶点数和边数:";
cin >> G.n >> G.e;
// 初始化邻接矩阵
for (int i = 0; i < G.n; i++) {
for (int j = 0; j < G.n; j++) {
G.adj[i][j] = 0;
}
}
// 读入边
cout << "请输入每条边的两个顶点:";
for (int k = 0; k < G.e; k++) {
int i, j;
cin >> i >> j;
G.adj[i][j] = G.adj[j][i] = 1; // 无向图
}
// 初始化visited数组
for (int i = 0; i < G.n; i++) {
visited[i] = false;
}
// 深度优先遍历
cout << "深度优先遍历结果:";
for (int i = 0; i < G.n; i++) {
if (!visited[i]) {
dfs(i);
}
}
cout << endl;
// 重新初始化visited数组
for (int i = 0; i < G.n; i++) {
visited[i] = false;
}
// 广度优先遍历
cout << "广度优先遍历结果:";
for (int i = 0; i < G.n; i++) {
if (!visited[i]) {
bfs(i);
}
}
cout << endl;
return 0;
}
```
示例输入和输出:
输入:
```
请输入顶点数和边数:5 6
请输入每条边的两个顶点:0 1 0 2 1 2 1 3 2 4 3 4
```
输出:
```
深度优先遍历结果:0 1 2 4 3
广度优先遍历结果:0 1 2 3 4
```
阅读全文