HDU2544最短路(dijkstra)
用dijkstra来练练手
1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 #include<map> 5 #include<vector> 6 #include<set> 7 #include<stack> 8 #include<queue> 9 #include<algorithm> 10 #include<stdlib.h> 11 using namespace std; 12 #define MAX(a,b) (a > b ? a : b) 13 #define MIN(a,b) (a < b ? a : b) 14 #define MAXN 10000001 15 #define INF 1000000007 16 #define mem(a) memset(a,0,sizeof(a)) 17 18 int w[200][200]; 19 int d[200]; 20 int vis[200]; 21 int n; 22 23 24 void dijkstra(int s) 25 { 26 d[s]=0; 27 for(int k=0;k<n;k++) 28 { 29 int m=INF; 30 for(int i=0;i<n;i++) 31 { 32 if(!vis[i] && d[i]<=m) 33 m=d[s=i]; 34 } 35 vis[s] = 1; 36 for(int i=0;i<n;i++) 37 { 38 d[i]=MIN(d[i], d[s]+w[s][i]); 39 } 40 } 41 } 42 43 44 45 int main() 46 { 47 //freopen("in.txt","r",stdin); 48 //freopen("out.txt","w",stdout); 49 int m; 50 while(~scanf("%d%d",&n,&m) && (n || m)) 51 { 52 mem(vis); 53 for(int i=0;i<n;i++) 54 { 55 d[i]=INF; 56 for(int j=0;j<n;j++) 57 { 58 w[i][j]=INF; 59 } 60 } 61 int a,b,x; 62 for(int i=0;i<m;i++) 63 { 64 scanf("%d%d%d",&a,&b,&x); 65 w[a-1][b-1] = w[b-1][a-1] = x; 66 } 67 68 dijkstra(0); 69 printf("%d\n",d[n] == INF?-1 : d[n-1]); 70 71 } 72 return 0; 73 }