图的广度遍历 对任意给定的图(顶点数和边数自定),建立它的邻接表并输出,然后利用队列的五种基本运算(置空队列、进队、出队、取队头元素、判队空)实现图的广度优先搜索遍历。画出搜索顺序示意图。c++程序实现
时间: 2024-02-16 10:05:08 浏览: 59
数据结构-c语言-带main函数-图7.3-图的遍历-广度优先搜索-队列-邻接表-无向图。
5星 · 资源好评率100%
好的,以下是一个使用 C++ 实现的示例代码,可以对任意给定的图进行广度优先搜索遍历,并输出邻接表和搜索顺序示意图:
```cpp
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
// 定义邻接表
struct Node {
char data;
vector<int> next;
};
// 定义广度优先搜索函数
void BFS(vector<Node>& adjList, vector<int>& visited, int start) {
queue<int> q;
q.push(start);
visited[start] = 1;
while (!q.empty()) {
int v = q.front();
q.pop();
cout << adjList[v].data << " ";
for (int i = 0; i < adjList[v].next.size(); i++) {
int w = adjList[v].next[i];
if (visited[w] == 0) {
q.push(w);
visited[w] = 1;
}
}
}
}
int main() {
// 定义图的邻接表
vector<Node> adjList;
Node node;
node.data = 'A';
node.next = {1, 2};
adjList.push_back(node);
node.data = 'B';
node.next = {0, 3, 4};
adjList.push_back(node);
node.data = 'C';
node.next = {0, 4};
adjList.push_back(node);
node.data = 'D';
node.next = {1, 4};
adjList.push_back(node);
node.data = 'E';
node.next = {1, 2, 3};
adjList.push_back(node);
// 定义已访问列表
vector<int> visited(adjList.size(), 0);
// 广度优先搜索
BFS(adjList, visited, 0);
// 输出邻接表
cout << endl;
for (int i = 0; i < adjList.size(); i++) {
cout << adjList[i].data << ": ";
for (int j = 0; j < adjList[i].next.size(); j++) {
cout << adjList[adjList[i].next[j]].data << " ";
}
cout << endl;
}
// 绘制搜索顺序示意图
cout << endl << "搜索顺序示意图:" << endl;
for (int i = 0; i < adjList.size(); i++) {
for (int j = 0; j < adjList[i].next.size(); j++) {
cout << adjList[i].data << " -> " << adjList[adjList[i].next[j]].data << endl;
}
}
return 0;
}
```
这段代码使用了邻接表来表示图,并且使用了 STL 中的 queue 类型来实现队列。具体步骤与 MATLAB 实现类似,也是先进行广度优先搜索,然后输出邻接表和搜索顺序示意图。你可以根据自己的需求修改顶点数和边数,然后运行这段代码来实现对任意图的广度优先搜索遍历。
阅读全文