1. 编写按键盘输入的数据建立图的邻接矩阵存储。 2. 编写图的深度优先遍历程序。 3. 编写图的广度优先遍历程序。 4. 设计一个选择菜单实现上述的各种基本操作 。
时间: 2024-01-24 22:16:42 浏览: 88
图的邻接矩阵表示,深度优先遍历,广度优先遍历实现
以下是一个简单的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;
}
```
可以根据自己的需求进行修改和完善。
阅读全文