hdu 1874 畅通工程续(最短路Dij邻接矩阵)
2015-11-03 14:29
323 查看
题目地址
题目大意:给出n个点m条边,并给出起点和终点,求起点到终点的最短路
解题思路:1.没有负边权
2.复杂度n^2(n为点的个数)
3.起点固定,不断更新终点,若要输出路径,则需要逆序输出
4.适用于有向图和无向图
题目大意:给出n个点m条边,并给出起点和终点,求起点到终点的最短路
解题思路:1.没有负边权
2.复杂度n^2(n为点的个数)
3.起点固定,不断更新终点,若要输出路径,则需要逆序输出
4.适用于有向图和无向图
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <vector> using namespace std; const int maxn=200+10; const int INF=0xfffffff; int n,m,mp[maxn][maxn],dis[maxn]; bool vis[maxn]; void dijkstra(int s) { memset(vis,0,sizeof(vis)); int cur=s; dis[cur]=0; vis[cur]=1; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) if(!vis[j] && dis[cur] + mp[cur][j] < dis[j]) dis[j]=dis[cur] + mp[cur][j]; int minn=INF; for(int j=0;j<n;j++) if(!vis[j] && dis[j] < minn) minn=dis[cur=j]; vis[cur]=true; } } int main() { while(scanf("%d%d",&n,&m) != EOF) { for(int i=0;i<n;i++) { dis[i]=INF; for(int j=0;j<n;j++) i==j ? mp[i][j]=0 : mp[i][j]=INF; } for(int i=0;i<m;i++) { int from,to,val; scanf("%d%d%d",&from,&to,&val); if(mp[from][to] > val) ///很重要,更小才需要更新 mp[to][from]=mp[from][to]=val; } int s,t; scanf("%d%d",&s,&t); dijkstra(s); dis[t]==INF ? printf("-1\n") : printf("%d\n",dis[t]); } return 0; }
相关文章推荐
- 杭电1088&zoj1099 Write a simple HTML Browser
- PreferencesFragment
- java实现图片裁切的工具类实例
- 熊孩子为什么叫我们阿姨/叔叔?
- ncurse
- iOS开发技巧:使用Xcode DEBUG模式和RELEASE模式
- 简单明了介绍Spring手工注入@autowire用法 及 beans.xml配置区别
- 并查集详解 (转)
- iOS9下App Store新应用提审攻略
- 5方与5W
- java并发编程(synchronized同步和Lock显示锁)
- bcb NumberUpDown 设置
- 图像处理质量评价标准之PSNR
- 3.6
- CoreGraphics QuartzCore CGContextTranslateCTM 用法
- 用qt编译Android应用(windows和Linux)
- Spring + Jersey构建发布Restful WebService
- 错误分析—linker command failed with exit code 1
- How to Enable EPEL Repository for RHEL/CentOS 7.x/6.x/5.x
- 将博客搬至CSDN