1. 编写按键盘输入的数据建立图的邻接矩阵存储。 2. 编写图的深度优先遍历程序。 3. 编写图的广度优先遍历程序。 4. 设计一个选择菜单实现上述的各种基本操作 。
时间: 2024-01-24 10:16:42 浏览: 84
建立图的邻接矩阵或邻接表存储并在此基础上实现图的深度优先遍历和广度优先遍历.doc
5星 · 资源好评率100%
以下是一个简单的C++实现:
```cpp
#include <iostream>
#include <queue>
using namespace std;
const int MAXN = 100;
int n, m; // n为顶点数,m为边数
int G[MAXN][MAXN]; // 邻接矩阵存储
// 深度优先遍历
void dfs(int u, bool vis[]) {
vis[u] = true;
cout << u << " ";
for (int v = 0; v < n; v++) {
if (G[u][v] && !vis[v]) {
dfs(v, vis);
}
}
}
// 广度优先遍历
void bfs(int u, bool vis[]) {
queue<int> q;
q.push(u);
vis[u] = true;
while (!q.empty()) {
int u = q.front(); q.pop();
cout << u << " ";
for (int v = 0; v < n; v++) {
if (G[u][v] && !vis[v]) {
q.push(v);
vis[v] = true;
}
}
}
}
int main() {
cout << "请输入顶点数和边数:" << endl;
cin >> n >> m;
cout << "请输入边的信息:" << endl;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
G[u][v] = G[v][u] = 1; // 无向图,所以要反向赋值
}
bool vis[MAXN] = {false}; // 标记是否被访问过
int choice;
do {
cout << endl << "请选择操作:1.深度优先遍历 2.广度优先遍历 3.退出" << endl;
cin >> choice;
switch (choice) {
case 1:
cout << "深度优先遍历结果为:";
for (int i = 0; i < n; i++) {
if (!vis[i]) {
dfs(i, vis);
}
}
break;
case 2:
cout << "广度优先遍历结果为:";
for (int i = 0; i < n; i++) {
if (!vis[i]) {
bfs(i, vis);
}
}
break;
case 3:
cout << "已退出程序!" << endl;
break;
default:
cout << "输入错误,请重新输入!" << endl;
break;
}
} while (choice != 3);
return 0;
}
```
可以根据自己的需求进行修改和完善。
阅读全文