[c]HDOJ1874 Dijkstra算法求最短路径
来源:互联网 发布:软件开发 质量奖项 编辑:程序博客网 时间:2024/05/21 06:31
http://acm.hdu.edu.cn/showproblem.php?pid=1874
题目标题:畅通工程续
题目大意:给出一个图与起点和终点,求两个点之间权值最小的路径
一个很基础的求最短路径的题,我用的Dijkstra算法来做的最短路径,Dijkstra算法类似于Prim算法,都是利用一个辅助数组来存关键点的最短距离,这个题有一个陷阱就是两个城市之间可能有好几条路(坑死人)
#include<iostream>#include<stdio.h>#include<string.h>#define Debug 0using namespace std;int a[205][205];int d[205];bool Judge[205];int m,n;int Shortest(int start,int end){for(int i=0;i<n;i++){d[i]=a[start][i];}d[start]=0;Judge[start]=0;for(int i=1;i<n;i++) { int sign; int min=1000001; for(int j=0;j<n;j++){ if(!Judge[j]){ if(d[j]<min){ sign=j; min=d[j]; } } } Judge[sign]=1; for(int j=0;j<n;j++){ if(!Judge[j] && (min+a[sign][j])<d[j]){ d[j]=min+a[sign][j]; } }}if(Debug){for(int i=0;i<n;i++){cout<<d[i]<<' ';}cout<<endl;}if(d[end]>1000000) d[end]=-1;return d[end];}int main(){while(cin>>n>>m){memset(a,1000001,sizeof(int)*205*205);memset(Judge,0,sizeof(bool)*205);for(int i=0;i<m;i++){int x,y,z;cin>>x>>y>>z;if(z<a[x][y]){a[x][y]=z;a[y][x]=z;}}if(Debug){for(int i=0;i<n;i++){for(int j=0;j<n;j++){cout<<a[i][j]<<' ';}cout<<endl;}}int s,e;cin>>s>>e;cout<<Shortest(s,e)<<endl;}return 0;}
0 0
- [c]HDOJ1874 Dijkstra算法求最短路径
- [c]HDOJ1874 floyd算法求最短路径
- dijkstra 求最短路径算法
- Dijkstra算法求最短路径
- Dijkstra 算法求最短路径
- Dijkstra算法求最短路径
- Dijkstra算法求最短路径
- Dijkstra 求最短路径算法
- Dijkstra算法 ---求最短路径
- Dijkstra算法求最短路径
- dijkstra算法求最短路径
- dijkstra算法求最短路径
- Dijkstra算法求最短路径
- dijkstra算法求最短路径
- 【算法】Dijkstra 求最短路径算法
- Dijkstra算法求最短路径问题完整C代码
- Dijkstra算法求最短路径(java)
- 求最短路径之Dijkstra算法
- Redis 服务器 单机数据库的实现
- Selenium学习笔记之011:操作对象
- 从C语言开始搞iOS开发
- J - Erasing and Winning UVA 11491
- Tomcat使用技巧最新总结
- [c]HDOJ1874 Dijkstra算法求最短路径
- java基础之产生随机数
- C++面向对象编程
- 变量一般不要定义在.h文件中
- 7.22日志
- java的值传递与引用传递试验
- C++构造函数
- 安卓基础之按比例布局layout_weight和weightSum
- linux内核维护的前期准备工作