您当前的位置:首页 > 技术风向标

一种基于最少边数的最短路径算法

时间:2015-09-08  来源:扁平线圈电感厂家  点击:

摘 要: 确定两点之间最短路径,通常要求该路径满足两点之间的权之和最小。为此采用层次遍历图的思想,设计了一种新的结构存放路径选择信息,找到一种确定这种最短路径的算法,并给出了算法描述以及实例。
关键词: 邻接表;边链表;层次遍历图;队列;最短路径

在实际生活中常常会遇到求最短路径问题,如:从A地到B地有若干条路可选,每条边上都标有象征某种意义的权值。有人选择路径的方法是希望总路径的权之和最小;有人选择中转次数最少;而还有人希望在中转次数最少的条件下尽量权之和最小。确定权之和最小的最短路径算法目前国内外公认较好的是Dijkstra算法和Floyed算法,这两种算法已被广泛用于生活中各个领域,如:网络寻优、道路交通等。但这些算法都只单纯地考虑路径中权之和达到最小,而并未考虑路径中边数能否也最少。而在目前高科技迅猛发展的经济时代,人们在选择出行方案时可能会更加注重降低因中转而产生的精力和时间的消耗而不会过多在意为此多出的花费。因此,许多情况下出行的人们会考虑中转次数尽量少,然后在相同的中转次数下优先选择花钱最少的路径作为选择方案。
本文提出了一种确定两个顶点之间经过的边数最少且相同边数前提下权值之和最小的最短路径的一种算法。在本算法中,采用邻接表存储结构存储原始图,在层次遍历法的思想遍历图的基础上进行了修改,设计了一种新的结点结构存放路径选择中的信息。当遍历到终点结点出现时,终止遍历过程,然后在目标结构中从该终点开始按指定的指针域层层向上搜索并输出经过的每一个结点序号直到指针为空为止。输出的序列就是要找的最短路径。
1 数据结构的设计及算法
设有n个顶点的一个无向图,图中每条边都标有代表某种意义的权值,现求从顶点i到顶点j的边数最少且权值也最小的最短路径。
1.1 数据结构的设计
(1) 采用邻接表作为原图的存储结构
其中的表头结点vnode中存放顶点信息如:城市名称(cityname),对应顶点的序号(verindex)以及指向该顶点的边链表的头指针域(firstarc),如图1所示。边链表结点node中存放顶点的序号(verindex)、表头结点到该顶点的边上的权值(weight)以及指向与表头顶点邻接的下一个顶点的指针域(nextarc),如图2所示。

C语言描述如下:
typedef struct node
{ int adjindex ;
int weight ;
struct node *nextarc ;
} Node ;
typedef struct vnode
{char cityname[20];
int verindex;
struct node *firstarc;
}Vnode ;
  n个顶点图的邻接表就定义为:vnode g[n+1];其中下标为0的元素不用。
(2) 存放路径信息的结点结构BT
该结构中的顶点有4个域,如图3所示。

C语言描述为:
typedef struct bt
{struct bt *parent ,*brother ,*first ;
int data ;
}BT ;
其中:
*parent:记录该结点被确定之前的最短路径上的前一个结点,称之为该结点的双亲。
*brother:记录该结点所在的边链表中下电容器 电感器一个未被访问过的顶点。
*first:记录该结点的边链表中第一个未被访问的顶点序号。
data:记录该结点序号。
(3)建立一个BT类的长度为n+1队列q并初始化为空队。
(4) 建立一个整型一维数组visited[n+1],用来存放每个顶点是否已被访问过的标志,未被访问其对应元素值为0,否则为1,因此初始化该数组全部为0。
1.2 算法
以交通问题为例,确定从城市A(对应序号为i)到城市B(对应号为j)经过的边数最少且相同边数条件下权之和也最小的最短路径。
算法描述中用到的变量声明约定如下:
Node *p,*q;
BT *t ,*r ,*u ,*q[n+1] ;
Vnode g[n+1] ;
int visited[n+1]={0}, i, j, w, k;
(1) 建立邻接表,为了确保找到的边数最少的路径也一定是相同边数下权值之和最小的一条,故要求每个顶点的边链表中的权值(weight)都是按从小到大的顺序连接起来的。为此,在算法中先将输入的所有边按权值进行降序排列,然后在建立图的邻接表时,依次考查每一条边,将该边的起点和终点分别以头插法插入到相应终点和起点的边链表中。

大电流电感

基于EPM1240的SDRAM控制器的设计摘要:SDRAM的读写逻辑复杂,最高时钟频率达100 MHz以上,普通单片机无法实现复杂的SDRAM控制操作,复杂可编程逻辑器件CPLD具有编程方便,集成度高,速度快,价格低等优点。因此选用CPLD设

求《Mentor Xpedition从零开始做工程之高速PCB如下图,Mentor Xpedition从零开始做工程之高速PCB设计。 作者:林超文,王子瑜,郭素娟 等; 卡斯旦电子科技有限公司 组编 出版日期:2016-06-01求该书的电子版。 说明: 1. 个人学习

高边PMOS管,既控制电源输出的导通与断开,同时想通 本帖最后由 yugzhi 于 2017-3-31 17:14 编辑 如题:各位大侠,我的电源输出在高边有一个PMOS管,为了保证可靠性,不能在低边做电流检测和用NMOS做导通与断开,只能在高边用PMOS管做导通与断开控制,同时电流检测也需要高边检测。     有人说可以通过检测PMOS内阻来确定过流的情况。      请问如何设计这个高边的电流检测,1:如果PMOS关断时,内阻之间的电压相当于电源输出的整个电压。 2:过流时PMOS内阻会不会变?如何比较精确的设定过流电阻的

注塑加工厂


上一篇基于AT89C51和DSl8820的数字温度计

下一篇ARM嵌入式汽车节能控制系统的设计


  
  温馨提示
网站首页 | 产品展示 | 科技前沿 | 行业资讯
本公司专业研发、设计、生产、销售贴片电感、插件电感、功率电感、大电流电感、扁平线圈电感、一体成型电感。
专业电感生产制造商,品质优异、交期快。
在线客服
热线电话