HDU--1874

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874

分析:SPFA|Dijkastra.

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<vector>
 7 #include<queue>
 8 #define ll long long
 9 #define inf 0x6fffffff
10 #define maxn 205
11 using namespace std;
12 int g[maxn][maxn],dis[maxn],n,m;
13 bool vis[maxn];
14 void dijkastra(const int s)
15 {
16     for(int i=0;i<n;i++)dis[i]=g[s][i];
17     memset(vis,false,sizeof(vis));
18     for(int i=0;i<n;i++)
19     {
20         int mark=-1,mindis=inf;
21         for(int j=0;j<n;j++)
22         if(!vis[j]&&dis[j]<=mindis)
23         {
24             mark=j;mindis=dis[j];
25         }
26         if(mark==-1)return;
27         vis[mark]=true;
28         for(int j=0;j<n;j++)
29         if(!vis[j]&&j!=mark)dis[j]=min(dis[j],dis[mark]+g[mark][j]);
30     }
31 }
32 int main()
33 {
34     while(~scanf("%d%d",&n,&m))
35     {
36         for(int i=0;i<n;i++)
37         for(int j=0;j<n;j++)
38         {
39              g[i][j]=inf;
40              if(i==j)g[i][j]=0;
41         }
42         int u,v,t,s;
43         for(int i=0;i<m;i++)
44         {
45             scanf("%d%d%d",&u,&v,&t);
46             if(g[u][v]>t)
47             {
48                  g[u][v]=t;
49                  g[v][u]=t;
50             }
51         }
52         scanf("%d%d",&s,&t);
53         dijkastra(s);
54         printf("%d\n",dis[t]>=inf?-1:dis[t]);
55     }
56     return 0;
57 }
View Code

 

posted @ 2013-08-29 09:22  EtheGreat  阅读(119)  评论(0编辑  收藏  举报