C++语言创建图,并采用深度优先搜索和广度优先搜索的方法进行遍历,要求用键盘输入节点
时间: 2023-06-13 08:08:04 浏览: 94
基于C++进行图的深度优先遍历(高级语言程序设计实验)
以下是基于邻接矩阵的 C++ 代码,实现了图的创建和深度优先搜索:
```c++
#include <iostream>
#include <queue>
using namespace std;
const int MAXN = 100; // 最大节点数
bool g[MAXN][MAXN]; // 邻接矩阵
bool visited[MAXN]; // 标记是否访问过
// 深度优先搜索
void dfs(int u, int n) {
visited[u] = true; // 标记已访问
cout << u << " "; // 输出节点编号
for (int v = 0; v < n; v++) {
if (g[u][v] && !visited[v]) { // 如果 u 和 v 有连边,且 v 没有被访问过
dfs(v, n); // 继续访问 v
}
}
}
// 广度优先搜索
void bfs(int u, int n) {
queue<int> q; // 存储待访问节点
visited[u] = true; // 标记已访问
q.push(u); // 加入队列
while (!q.empty()) { // 只要队列不为空,就一直循环
int x = q.front(); // 取出队首元素
q.pop(); // 弹出队首元素
cout << x << " "; // 输出节点编号
for (int v = 0; v < n; v++) {
if (g[x][v] && !visited[v]) { // 如果 x 和 v 有连边,且 v 没有被访问过
visited[v] = true; // 标记已访问
q.push(v); // 加入队列
}
}
}
}
int main() {
int n, m; // n 个节点,m 条边
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
g[u][v] = true; // 添加一条从 u 到 v 的边
g[v][u] = true; // 添加一条从 v 到 u 的边
}
int start; // 起始节点
cin >> start;
cout << "DFS: ";
dfs(start, n); // 深度优先搜索
cout << endl;
memset(visited, false, sizeof(visited)); // 重置 visited 数组
cout << "BFS: ";
bfs(start, n); // 广度优先搜索
cout << endl;
return 0;
}
```
使用示例:
输入:
```
5 6
0 1
0 2
1 2
1 3
2 3
3 4
0
```
输出:
```
DFS: 0 1 2 3 4
BFS: 0 1 2 3 4
```
其中,输入的第一行表示节点数和边数,接下来的 m 行表示每条边的两个节点编号,最后一行表示起始节点编号。
阅读全文