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
",d[n] == INF?-1 : d[n-1]);
70 
71     }
72     return 0;
73 }
原文地址:https://www.cnblogs.com/gj-Acit/p/3204135.html