欢迎来到天天文库
浏览记录
ID:9347850
大小:100.00 KB
页数:12页
时间:2018-04-28
《最短路的dijkstra算法的程序源代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、关于最短路的Dijkstra算法的程序源代码!悬赏分:150
2、解决时间:2009-1-2500:57
3、提问者:hraper最好是matlab的!急用!!!!哪位高手有相关的程序请发到yangzhuwen6@163.com,谢谢!!!!!!最佳答案Dijkstra算法Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内
4、容有详细的介绍,如数据结构,图论,运筹学等等。Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN,CLOSE表方式,Drew为了和下面要介绍的A*算法和D*算法表述一致,这里均采用OPEN,CLOSE表的方式。其采用的是贪心法的算法策略大概过程:创建两个表,OPEN,CLOSE。OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。1.访问路网中距离起始点最近且没有被检查过的点,把这个点放入OPEN组中等待检查。2.从OPEN表中找出距起始点最近的点,找出这个点的所有子节点,把这个点放到CLOSE表中
5、。3.遍历考察这个点的子节点。求出这些子节点距起始点的距离值,放子节点到OPEN表中。4.重复第2和第3步,直到OPEN表为空,或找到目标点。[编辑本段]算法实现#include#defineMaxNum765432100usingnamespacestd;ifstreamfin("Dijkstra.in");ofstreamfout("Dijkstra.out");intMap[501][501];boolis_arrived[501];intDist[501],From[501],Stack[501];intp,q,k,Path,So
6、urce,Vertex,Temp,SetCard;intFindMin(){intp,Temp=0,Minm=MaxNum;for(p=1;p<=Vertex;p++)if((Dist[p]>Source>>Vertex;for(p=1;p<=Vertex;p++)for(q=1;q<=Vertex;q++){fin>>Map[p][
7、q];if(Map[p][q]==0)Map[p][q]=MaxNum;}for(p=1;p<=Vertex;p++){Dist[p]=Map[Source][p];if(Dist[p]!=MaxNum)From[p]=Source;elseFrom[p]=p;}is_arrived[Source]=true;SetCard=1;do{Temp=FindMin();if(Temp!=0){SetCard=SetCard+1;is_arrived[Temp]=true;for(p=1;p<=Vertex;p++)if((Dist[p]>Dist[Temp]+
8、Map[Temp][p])&&(!is_arrived[p])){Dist[p]=Dist[Temp]+Map[Temp][p];From[p]=Temp;}}elsebreak;}while(SetCard!=Vertex);for(p=1;p<=Vertex;p++)if(p!=Source){fout<<"========================";fout<<"Source:"<9、";fout<<"Path:NoWay!";}else{fout<<"Distance:"<=1;q--)fout<<"-->"<10、t27002050300000002000250000700050
9、";fout<<"Path:NoWay!";}else{fout<<"Distance:"<=1;q--)fout<<"-->"<10、t27002050300000002000250000700050
10、t27002050300000002000250000700050
此文档下载收益归作者所有