描述 设无向连通图的点编号从0开始递增排列,编写图的建立函数用矩阵方式存储图。 输入1+m+1行 第一行 为点数 和边数 后面m行为每条边的两个端点信息 最后一行是广搜的起点编号。 输出 图的广度搜索序列
时间: 2024-02-21 07:00:20 浏览: 70
C语言 输入无向图连通图的顶点数、顶点信息、边数、顶点对序列及遍历的起始点序号,输出深度优先遍历序列
5星 · 资源好评率100%
好的,下面是实现该功能的代码:
```c++
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
const int MAXN = 100;
int G[MAXN][MAXN]; // 图的邻接矩阵存储
int visited[MAXN]; // 标记数组,记录每个顶点是否已被访问
int n, m; // n为结点数,m为边数
void createGraph() {
memset(G, 0, sizeof(G)); // 初始化邻接矩阵
cin >> n >> m;
int u, v;
for (int i = 0; i < m; i++) {
cin >> u >> v;
G[u][v] = G[v][u] = 1; // 无向图,边是双向的
}
}
void BFS(int s) { // 广度优先搜索
memset(visited, 0, sizeof(visited)); // 初始化visited数组
queue<int> Q;
visited[s] = 1;
Q.push(s);
while (!Q.empty()) {
int u = Q.front();
Q.pop();
cout << u << " ";
for (int v = 0; v < n; v++) {
if (G[u][v] && !visited[v]) { // 如果u和v之间有边,且v未被访问过
visited[v] = 1;
Q.push(v);
}
}
}
}
int main() {
createGraph(); // 建立图
int s; // 广搜起点
cin >> s;
BFS(s);
return 0;
}
```
该程序的思路是先根据输入的点数和边数建立无向图的邻接矩阵存储结构,然后进行广度优先搜索,最后输出广搜序列。在BFS函数中,我们使用队列来存储遍历的顶点,每次取出队首元素进行遍历,并将未访问过的邻接点加入队列中,直到队列为空为止。
阅读全文