无向图中基于宽度优先搜索的求两个节点间的最短跳数

一、问题描述   

    跳数是网络路由中的术语,表示消息从一个路由器传送到另一个路由器要经过几个节点的转发,就称为几跳。那么有一个问题就是,当需要找到转发次数最短的路径时,就会涉及到从一个节点到另一个节点之间最短跳数问题。


                                        图1 一个简单的无向图

    如在图1中所示,从节点0到节点6的跳数为2,我们通过肉眼可以很快的分辨,然而当图中的节点数变多,路径连接更加复杂时,肉眼就无法观察出结果了。

二、方法介绍

    在图中有一种遍历图的方式叫宽度优先搜索(BFS),可以被用到该问题的求解中来。我们可以从起始节点开始进行宽度优先遍历,当遍历到所要求解的那个节点时,遍历的深度即为这两个节点间的最短跳数。在宽度优先搜索中,通常需要采用队列的方式来完成,首先将遍历到的节点压入队列,然后依次从队列中取出队首节点,寻找该节点的相邻节点,再次压入队列,直到找到所求节点或则队列元素为空即停止遍历。

     因此解决该文题的关键是宽度优先搜索方法的实现和队列的构建。

三、程序实现

     为了程序实现上述问题的求解,并提供结果演示。首先通过将图1所示的无向图转换为数据的方式存储在文本文件中。文本文件命名为data.txt, 在该文件中首先存储的一行数据包含两个元素,依次为图所包含的节点总数n,图中边的总数edge,数据之间用空格分开,结尾通过回车换行。接下来为edge行数据,每一行有三个数据,依次为边的起始节点,边的结束节点,边的权重,数据之间用空格分开,每一行结尾采用回车换行。如图1所示的无向图转化为数据存储在data.txt中后如图2所示:


                                                                                               图2 无向图数据

      数据读取出后,采用邻接矩阵存储。在所编写的程序中通过函数int routeHop(int **a,

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值