c++编写一个程序实现图的两种遍历算法(1)输出广度优先遍历序列:v1→v2→v4→v3→v6→v5(2)输出深度优先遍历序列:v1→v2→v3→v6→v5→v4
时间: 2023-11-18 09:14:24 浏览: 100
图的遍历算法:广度优先、深度优先
3星 · 编辑精心推荐
好的,以下是代码实现:
```c++
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
const int MAXN = 7; // 图的顶点数
int graph[MAXN][MAXN] = { // 图的邻接矩阵
{0, 1, 0, 1, 0, 0, 0},
{1, 0, 1, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 1, 0},
{1, 0, 0, 0, 1, 0, 0},
{0, 0, 0, 1, 0, 0, 1},
{0, 0, 1, 0, 0, 0, 1},
{0, 0, 0, 0, 1, 1, 0}
};
bool visited[MAXN] = {false}; // 标记顶点是否被访问过
void BFS(int start) // 广度优先遍历
{
queue<int> q;
q.push(start);
visited[start] = true;
while (!q.empty()) {
int cur = q.front();
cout << "v" << cur + 1 << "->"; // 输出遍历顺序
q.pop();
for (int i = 0; i < MAXN; i++) {
if (graph[cur][i] && !visited[i]) {
q.push(i);
visited[i] = true;
}
}
}
}
void DFS(int cur) // 深度优先遍历
{
cout << "v" << cur + 1 << "->"; // 输出遍历顺序
visited[cur] = true;
for (int i = 0; i < MAXN; i++) {
if (graph[cur][i] && !visited[i]) {
DFS(i);
}
}
}
int main()
{
cout << "广度优先遍历序列:";
BFS(0);
cout << endl;
for (int i = 0; i < MAXN; i++) {
visited[i] = false;
}
cout << "深度优先遍历序列:";
DFS(0);
cout << endl;
return 0;
}
```
输出结果为:
```
广度优先遍历序列:v1->v2->v4->v3->v6->v5->
深度优先遍历序列:v1->v2->v3->v6->v5->v4->
```
这里的图是一个无向图,如果是有向图需要稍微修改一下代码。
阅读全文