图-最短路径-Dijkstra算法
来源:互联网 发布:散热仿真软件 编辑:程序博客网 时间:2024/05/20 19:30
算法步骤(该算法要求边的权值不能为负!!!解决负值的问题需要用到Bellman-Ford算法):
1 :从要找的起点比如A出发,找出A距离其他点路径最短的那个点比如为B,标记访问。(A无法到达的点是为距离无限大)
2:通过B点,更新A通过B点到其他点的距离,找出这时到其它点(没有标记访问的)最短的距离,记录该点比如为C,标记访问。
3:通过C点,重复操作步骤2
代码(该代码用邻接矩阵来存图,当图很大的时候,这种方法效率低):
#include<iostream>using namespace std;#define MAX 9999int n;int Map[2017][2017];//存图int visit[2017];//访问标记int d[2017];//源点到各点最短距离/*初始化*/void init(){cout<<"how many node:?\n";cin>>n;int i,j;for(i=1;i<=n;i++) for(j=1;j<=n;j++){ cin>>Map[i][j]; if(Map[i][j]==0)//没有记录到即无法到达,距离设为足够大 Map[i][j]=MAX;}}/*算法*/void dijkstra(int x){int i,j,Min,p;for(i=1;i<=n;i++) d[i]=Map[x][i];visit[x]=1;//记录自己已被访问d[x]=0;//自己到自己为0for(i=1;i<n;i++)//循环n-1遍就可以将所有点记录了{ Min=MAX; for(j=1;j<=n;j++)//找出当前最短的边 if(!visit[j] && Min>d[j])//没找过的点 { p=j; Min=d[j]; } visit[p]=1;//记录该点 for(j=1;j<=n;j++) if(!visit[j] && Min+Map[p][j]<d[j])//更新操作 d[j]=Min+Map[p][j];}cout<<"点1到各点最短距离依次为:"<<endl;for(int i=1;i<=n;i++) cout<<i<<"-------"<<d[i]<<endl;}/*测试数据50 0 1 0 30 0 0 5 51 0 0 1 20 5 1 0 23 5 2 2 030 1 21 0 32 3 0*/int main(){init();cout<<"----"<<endl;dijkstra(1);return 0;}
0 0
- 图算法 最短路径 Dijkstra算法
- 图的最短路径dijkstra算法
- Dijkstra算法--图的最短路径
- 图-最短路径-Dijkstra算法
- DIJKSTRA最短路径算法
- 最短路径算法-dijkstra
- dijkstra最短路径算法
- 最短路径 Dijkstra算法
- 最短路径(Dijkstra算法)
- 最短路径Dijkstra算法
- 最短路径 Dijkstra算法
- Dijkstra最短路径算法
- 最短路径dijkstra算法
- 最短路径 dijkstra算法
- 最短路径Dijkstra 算法
- 最短路径 (Dijkstra算法)
- Dijkstra最短路径算法
- 最短路径(Dijkstra算法)
- CAE开发日志(6):cae_pdf2html设计
- Python基础数据结构之tuple
- Git撤销&回滚操作
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 纯小白系列(一)之PC病毒分析
- 图-最短路径-Dijkstra算法
- Ramda 函数库参考教程
- HTTP协议详解(2)
- JavaWeb前端开发知识总结(javaScript)
- python项目练习八:使用XML-RPC进行远程文件共享
- 浅谈SVM(六)
- FastReport.net 系列-----FastReport基本操作介绍(数据绑定,页面布局)
- Leetcode 16. 3Sum Closest
- [Leetcode] 129. Sum Root to Leaf Numbers 解题报告