掌握图的两种存储结构及创建方法; 掌握图的深度优先遍历和广度优先遍历算法及其实现; 二、实验内容: 1、 所输入的数据要为整形数据 2、 输出的形式为:每按一次回车,遍历一个结点 3、 能创建最大结点树为30的任意图,实现对无向图的两种遍历 程序流程: main()àclrscr()àvisited()àDFS()àvisited()àBFS()用代码表示
时间: 2023-06-19 08:06:31 浏览: 179
下面是一个简单的 C++ 实现,实现了深度优先遍历和广度优先遍历,可以创建最大节点数为30的无向图:
```cpp
#include <iostream>
#include <queue>
using namespace std;
#define MAX_NODES 30
// 邻接矩阵存储图
int graph[MAX_NODES][MAX_NODES];
int visited[MAX_NODES];
int n; // 节点数
// 深度优先遍历
void DFS(int node) {
cout << node << " ";
visited[node] = 1;
for (int i = 0; i < n; i++) {
if (graph[node][i] && !visited[i]) {
DFS(i);
}
}
}
// 广度优先遍历
void BFS(int node) {
visited[node] = 1;
queue<int> q;
q.push(node);
while (!q.empty()) {
int cur = q.front();
q.pop();
cout << cur << " ";
for (int i = 0; i < n; i++) {
if (graph[cur][i] && !visited[i]) {
visited[i] = 1;
q.push(i);
}
}
}
}
int main() {
cout << "请输入节点数(不超过 " << MAX_NODES << "):";
cin >> n;
cout << "请输入 " << n << " 行 " << n << " 列的邻接矩阵:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> graph[i][j];
}
}
cout << "深度优先遍历结果:" << endl;
memset(visited, 0, sizeof(visited));
DFS(0);
cout << endl;
cout << "广度优先遍历结果:" << endl;
memset(visited, 0, sizeof(visited));
BFS(0);
cout << endl;
return 0;
}
```
注意:此实现中假设节点编号从0开始,且输入的邻接矩阵为对称矩阵(因为是无向图)。
阅读全文