标签:
题目链接:http://poj.org/problem?id=2387
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 45414 | Accepted: 15405 |
Description
Input
Output
Sample Input
5 5 1 2 20 2 3 30 3 4 20 4 5 20 1 5 100
Sample Output
90
题目大意:有N个节点,T条路(带权值),求1到N的最短路径。
解题思路:最短路迪杰斯特拉算法(模板题)。
AC代码:
1 #include <stdio.h> 2 #include <string.h> 3 #define inf 999999999 4 int visit[1010]; 5 int dis[1010]; 6 int p[1010][1010]; 7 int n; 8 int dijkstra() 9 { 10 int i,j,pos = 0,minn; 11 memset(visit,0,sizeof(visit)); 12 visit[1] = 1; 13 dis[1] = 0; 14 for (i = 2; i <= n; i ++) 15 dis[i] = p[1][i]; 16 for (i = 1; i <= n; i ++) 17 { 18 minn = inf; 19 for (j = 1; j <= n; j ++) 20 { 21 if (!visit[j] && dis[j] < minn) 22 { 23 minn = dis[j]; 24 pos = j; 25 } 26 } 27 visit[pos] = 1; 28 for (j = 1; j <= n; j ++) 29 if (!visit[j] && dis[j] > dis[pos]+p[pos][j]) 30 dis[j] = dis[pos]+p[pos][j]; 31 } 32 return dis[n]; 33 } 34 int main () 35 { 36 int t,a,b,c,i,j; 37 while (~scanf("%d%d",&t,&n)) 38 { 39 for (i = 1; i <= n; i ++) 40 for (j = 1; j <= n; j ++) 41 p[i][j] = inf; 42 43 for (i = 0; i < t; i ++) 44 { 45 scanf("%d%d%d",&a,&b,&c); 46 if (p[a][b] > c) 47 p[a][b] = p[b][a] = c; 48 } 49 printf("%d\n",dijkstra()); 50 } 51 return 0; 52 }
POJ 2387 Til the Cows Come Home
标签:
原文地址:http://www.cnblogs.com/yoke/p/5862470.html