
C++邻接矩阵存储图的广度优先搜索
使用队列来管理待访问的顶点。 初始化队列,将起始顶点加入队列,并标记其已访问状态。 循环处理队列,取出当前顶点,输出其访问信息。 遍历当前顶点的所有邻居顶点,如果邻居未被访问过且边权值不为无穷大,则将邻居加入队列并标记为已访问。 邻接矩阵初始化:使用一个二维数组G来存储图的邻接信息,初始值为INF表示无边。 输入处理:读取顶点数n和边数edges,然后读取每条边的信息并填充邻接矩阵。 广度优先搜索实现:从起始顶点0开始,使用队列管理当前访问的顶点,逐层扩展到未访问的邻居顶点,直到队列为空。
发布日期:2021-05-07 22:04:56
浏览次数:16
分类:精选文章
本文共 1584 字,大约阅读时间需要 5 分钟。
数据结构中对于图的存储主要有三种方式,其中邻接矩阵和邻接表是最常用的。以下将以C++语言为例,介绍如何使用邻接矩阵存储图并实现广度优先搜索遍历。
使用邻接矩阵存储图
邻接矩阵是一种二维数组,其中graph[u][v]用于存储从顶点u到顶点v的边信息。在无向图中,需要标记graph[u][v]和graph[v][u]为1,表示顶点u与顶点v相连。在有权图中,邻接矩阵中的值可以存储边的权重。对于有向有权图,邻接矩阵的操作更加方便,只需在输入数据时记录起点和终点对应的权重即可。
实现广度优先搜索
广度优先搜索(BFS)是一种图遍历算法,常用于寻找最短路径。实现过程如下:
图的具体实现
以下是基于邻接矩阵的图存储和BFS实现代码示例:
#include#include using namespace std;#define maxSize 1000#define INF 100000000bool inq[maxSize] = {false};int n, edges, G[maxSize][maxSize];void bfs(int u) { queue q; q.push(u); inq[u] = true; while (!q.empty()) { int current = q.front(); q.pop(); for (int v = 0; v < n; v++) { if (!inq[v] && G[current][v] != INF) { q.push(v); inq[v] = true; } } }}int main() { cout << "输入图中的顶点数: "; cin >> n; // 初始化邻接矩阵为无穷大 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { G[i][j] = INF; } } cout << endl; cout << "输入图中的边数: "; cin >> edges; cout << endl; // 读取边信息并填充邻接矩阵 int u, v, weight; for (int i = 0; i < edges; i++) { cin >> u >> v >> weight; G[u][v] = weight; } bfs(0); // 从顶点0开始广度优先搜索 return 0;}
代码解释
通过上述方法,可以实现图的存储和广度优先搜索遍历。代码结构清晰,易于理解和修改,适合用于图的基本操作研究。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月09日 15时42分09秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
NAT工作原理
2019-03-05
Processes, threads and goroutines
2019-03-05
c++中的10种常见继承
2019-03-05
语义化版本编号(Semantic Versioning)
2019-03-05
E28 LoRa模块透传 定点传输 RSSI测试与MicroPython应用
2019-03-05
抽离css文件
2019-03-05
babel预设、插件和webpack中运行
2019-03-05
Vue学习—深入剖析渲染函数
2019-03-05
Vue学习—深入剖析函数式组件
2019-03-05
基于selenium的分布式爬虫-微浏览器
2019-03-05
网络编程一 tcp的一些信号处理
2019-03-05
简单Makefile的编写
2019-03-05
使用BAT批处理 匹配查找指定文件夹,并在当文件夹下创建空文件
2019-03-05
wxpython的Hello,World代码探索
2019-03-05
IDEA出现错误:找不到或无法加载主类 io.xxx.XXXApplication
2019-03-05
【数字图像处理】OpenCV3 学习笔记
2019-03-05
【单片机开发】智能小车工程(经验总结)
2019-03-05
【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
2019-03-05
【单片机开发】基于stm32的掌上游戏机设计(终章)
2019-03-05