城市平乱(最短路径)
2015-07-10 20:50
211 查看
城市平乱
时间限制:1000 ms | 内存限制:65535 KB难度:4
描述
南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市。
他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M。
现在,小工军师告诉南将军,第K号城市发生了暴乱,南将军从各个部队都派遣了一个分队沿最近路去往暴乱城市平乱。
现在已知在任意两个城市之间的路行军所需的时间,你作为南将军麾下最厉害的程序员,请你编写一个程序来告诉南将军第一个分队到达叛乱城市所需的时间。
![](http://acm.nyist.net/JudgeOnline/admin/kind/attached/20101122174626_27048.png)
注意,两个城市之间可能不只一条路。
输入第一行输入一个整数T,表示测试数据的组数。(T<20)
每组测试数据的第一行是四个整数N,M,P,Q(1<=N<=100,N<=M<=1000,M-1<=P<=100000)其中N表示部队数,M表示城市数,P表示城市之间的路的条数,Q表示发生暴乱的城市编号。
随后的一行是N个整数,表示部队所在城市的编号。
再之后的P行,每行有三个正整数,a,b,t(1<=a,b<=M,1<=t<=100),表示a,b之间的路如果行军需要用时为t
数据保证暴乱的城市是可达的。
输出对于每组测试数据,输出第一支部队到达叛乱城市时的时间。每组输出占一行
样例输入
1 3 8 9 8 1 2 3 1 2 1 2 3 2 1 4 2 2 5 3 3 6 2 4 7 1 5 7 3 5 8 2 6 8 2
样例输出
4
来源《世界大学生程序设计竞赛高级教程·第一册》改编
上传者张云聪
#include<cstdio> #include<cstring> #include<iostream> const int M=1005; const int infinity=0x3f3f3f3f; using namespace std; int map[M][M]; int vis[M],n,m; int army[105],dis[M]; int djsta(int x,int y) { int i,j,mins,p; for(i=1;i<=m;i++) { dis[i]=map[x][i];//记录某一个点到第一个点的距离! } memset(vis,0,sizeof(vis));//默认都未被访问! vis[x]=1; for(i=1;i<=m;i++) { mins=infinity; for(j=1;j<=m;j++) { if(!vis[j]&&dis[j]<mins) { p=j; mins=dis[j]; } } vis[p]=1; for(j=1;j<=m;j++) { if(!vis[j]&&dis[p]+map[p][j]<dis[j]) { dis[j]=dis[p]+map[p][j]; } } } return dis[y]; } int main() { int t,p,q,i,a,b,c,mins,ans; scanf("%d",&t); while(t--) { scanf("%d%d%d%d",&n,&m,&p,&q); mins=10000; for(i=1;i<=m;i++) { for(int j=1;j<=m;j++) { map[i][j]=infinity; } } for(i=0;i<n;i++) { scanf("%d",&army[i]); } while(p--) { scanf("%d%d%d",&a,&b,&c); map[a][b]=map[b][a]=c; } for(i=0;i<n;i++) { ans=djsta(army[i],q); // cout<<ans<<endl; if(ans<mins) { mins=ans; } } cout<<mins<<endl; } }
相关文章推荐
- MVC过滤器详解 面向切面编程(AOP)
- HDOJ 1000 A + B Problem
- python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
- Java获取图片属性
- canvas画布基础
- poj 1416 Shredding Company (DFS)
- update-alternatives命令详解
- 大数阶乘
- 汉诺塔
- Android项目结构介绍
- Spring特性——事件驱动模型
- 【DP】 (ASC 44) Braess's Paradox
- Android API 翻译之 UsbDevice
- [LeetCode][Java] Implement strStr()
- 锁排查--实例
- 设计模式读书笔记:Interpreter(解释器)
- Java学习笔记
- 浮点数的范围和精度
- javaweb 待填坑
- 结构体指针