light oj 1019【最短路模板】
2015-09-15 19:49
281 查看
1019 - Brush (V)
Tanvir returned home from the contest and got angry after seeing his room dusty. Who likes to see a dusty room after a brain storming programming contest? After checking a bit he found that there is no brush in him room. So, he called Atiq to get a brush. But as usual Atiq refused to come. So, Tanvir decided to go to Atiq's house.
The city they live in is divided by some junctions. The junctions are connected by two way roads. They live in different junctions. And they can go to one junction to other by using the roads only.
Now you are given the map of the city and the distances of the roads. You have to find the minimum distance Tanvir has to travel to reach Atiq's house.
Each case starts with a blank line. The next line contains two integers N (2 ≤ N ≤ 100) and M (0 ≤ M ≤ 1000), means that there are N junctions and M two way roads. Each of the next M lines will contain three integers u v w (1 ≤ u, v ≤ N, w ≤ 1000), it means that there is a road between junction u and v and the distance is w. You can assume that Tanvir lives in the 1st junction and Atiq lives in the Nth junction. There can be multiple roads between same pair of junctions.
练练模板
PDF (English) | Statistics | Forum |
Time Limit: 2 second(s) | Memory Limit: 32 MB |
The city they live in is divided by some junctions. The junctions are connected by two way roads. They live in different junctions. And they can go to one junction to other by using the roads only.
Now you are given the map of the city and the distances of the roads. You have to find the minimum distance Tanvir has to travel to reach Atiq's house.
Input
Input starts with an integer T (≤ 100), denoting the number of test cases.Each case starts with a blank line. The next line contains two integers N (2 ≤ N ≤ 100) and M (0 ≤ M ≤ 1000), means that there are N junctions and M two way roads. Each of the next M lines will contain three integers u v w (1 ≤ u, v ≤ N, w ≤ 1000), it means that there is a road between junction u and v and the distance is w. You can assume that Tanvir lives in the 1st junction and Atiq lives in the Nth junction. There can be multiple roads between same pair of junctions.
Output
For each case print the case number and the minimum distance Tanvir has to travel to reach Atiq's house. If it's impossible, then print 'Impossible'.Sample Input | Output for Sample Input |
2 3 2 1 2 50 2 3 10 3 1 1 2 40 | Case 1: 60 Case 2: Impossible |
#include<stdio.h> #include<string.h> #define MAX 1010 #define INF 0x3f3f3f int n,m; int vis[MAX],dis[MAX]; int map[MAX][MAX]; void init() { int i,j; for(i=1;i<=n;i++) for(j=1;j<=n;j++) map[i][j]=i==j?0:INF; } void dijktra() { int i,j,next,min; for(i=1;i<=n;i++) dis[i]=map[1][i]; memset(vis,0,sizeof(vis)); vis[1]=1; next=1; for(i=2;i<=n;i++) { min=INF; for(j=1;j<=n;j++) { if(!vis[j]&&min>dis[j]) { next=j; min=dis[j]; } } vis[next]=1; for(j=1;j<=n;j++) { if(!vis[j]&&dis[j]>dis[next]+map[next][j]) dis[j]=dis[next]+map[next][j]; } } if(dis ==INF) printf("impossible\n"); else printf("%d\n",dis ); } int main() { int k,t,j,i,a,b,c; scanf("%d",&t); k=0; while(t--) { scanf("%d%d",&n,&m); init(); while(m--) { scanf("%d%d%d",&a,&b,&c); if(map[a][b]>c) map[a][b]=map[b][a]=c; } printf("Case %d:",++k); dijktra(); } return 0; }
相关文章推荐
- ios7 侧滑返回
- ORM对象关系映射之GreenDAO高级用法
- Cache技术――OSCache(转-全)
- C++左值和右值
- 例题6-1 并行程序模拟 UVa210 双端队列
- ORM对象关系映射之GreenDAO高级用法
- sql学习笔记
- Type InvokeMember()用法简介
- python笔记之itertools模块
- .net micro framework Netduino无法休眠
- fragment与Activity的生命周期
- python笔记之提取网页中的超链接
- Hadoop中的一些基本操作
- RecyclerView学习笔记
- 一些查询TABLESPACE的sql
- Oracle客户端的安装与远程连接配置方法分享
- hdu5442 最小最大表示法+kmp
- python思想一
- 【IOS 开发学习总结-OC-7.9-★】 objective-c——字符串与指针
- python笔记之ZipFile模块