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 }
今天写题还算顺……