hdu(1874)最短路径问题

贡献了一次wa,有重边,忘了考虑,看下discuss真好,要不然不知道这错误要找到什么时候

这道题算是基础题吧

 1 #include <cstring>
 2 #include <stdio.h>
 3 #define Max 0x7f7f7f7f
 4 using namespace std;
 5 int map[205][205];
 6 int dis[205],visited[205];
 7 int n,start,end;
 8 void  Dijkstra()
 9 {
10     dis[start]=0;
11     int pos;
12     for(int i=0;i<n;i++)
13     {
14         int min=Max;
15         for(int j=0;j<n;j++)
16         {
17             if(dis[j]<min && visited[j]==0)
18             {
19                 min=dis[j];
20                 pos=j;
21             }
22         }
23         if(pos==end) return;
24         visited[pos]=1;
25         for(int j=0;j<n;j++)
26         {
27             if(map[pos][j]!=Max && visited[j]==0)
28             {
29                 if(dis[j]>map[pos][j]+dis[pos])
30                 {
31                     dis[j]=map[pos][j]+dis[pos];
32                 }
33             }
34         }
35     }
36 }
37 
38 int main()
39 {
40     int m,i,x,y,value;
41     while(scanf("%d%d",&n,&m)!=EOF)
42     {
43         memset(visited,0,sizeof(visited));
44         memset(map,Max,sizeof(map));
45         memset(dis,Max,sizeof(dis));
46         for(i=0;i<m;i++)
47         {
48             scanf("%d%d%d",&x,&y,&value);
49             if(value<map[x][y])
50             {
51                 map[x][y]=map[y][x]=value;//处理有重边的情况
52             }
53         }
54         scanf("%d%d",&start,&end);
55         Dijkstra();
56         if(dis[end]!=Max)
57         printf("%d\n",dis[end]);
58         else printf("-1\n");
59     }
60 
61 
62     return 0;
63 }

今天写题还算顺……

posted on 2012-08-14 10:39  矮人狙击手!  阅读(253)  评论(0编辑  收藏  举报

导航