设无向图G有n个顶点(设顶点值用1~n编号),m条边,假设图以数组表示法存储。 编写程序,实现以下功能: (1)创建图的邻接矩阵存储结构 (2)深度优先遍历 (3)广度优先遍历
时间: 2024-02-05 21:03:01 浏览: 68
以下是基于C++的实现:
```cpp
#include <iostream>
#include <queue>
using namespace std;
const int MAXN = 100; // 最大顶点数
bool g[MAXN][MAXN]; // 邻接矩阵
// 深度优先遍历
void dfs(int u, bool visited[]) {
visited[u] = true;
cout << u << " ";
for (int v = 1; v <= MAXN; v++) {
if (g[u][v] && !visited[v]) {
dfs(v, visited);
}
}
}
// 广度优先遍历
void bfs(int start) {
bool visited[MAXN] = {false};
queue<int> q;
visited[start] = true;
q.push(start);
while (!q.empty()) {
int u = q.front();
q.pop();
cout << u << " ";
for (int v = 1; v <= MAXN; v++) {
if (g[u][v] && !visited[v]) {
visited[v] = true;
q.push(v);
}
}
}
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
g[u][v] = g[v][u] = true;
}
// 深度优先遍历
bool visited[MAXN] = {false};
for (int u = 1; u <= n; u++) {
if (!visited[u]) {
dfs(u, visited);
}
}
cout << endl;
// 广度优先遍历
bfs(1);
cout << endl;
return 0;
}
```
输入格式为:第一行两个整数n和m,表示顶点数和边数;接下来m行每行两个整数u和v,表示一条连接u和v的边。程序先根据输入构建邻接矩阵,然后执行深度优先遍历和广度优先遍历。
阅读全文