题目链接:http://poj.org/problem?id=2387

今天心情不好,复习一下最短路吧。和之前没啥突破,明天继续研究,

   1: #include<iostream>
   2: #include<cstring>
   3: using namespace std;
   4: #define inf 0xfffffff
   5: int map[1005][1005];
   6: int dis[1005];
   7: bool visit[1005];
   8: void djk(int n)
   9: {
  10:     int i,j,tap,temp;
  11:     memset(visit,0,sizeof(visit));
  12:     for(i=1;i<=n;i++)
  13:         dis[i]=map[1][i];
  14:     visit[1]=1;
  15:     dis[1]=0;
  16:     for(i=1;i<n;i++)
  17:     {
  18:         temp=inf;
  19:         for(j=1;j<=n;j++)
  20:         {
  21:             if(!visit[j]&&dis[j]<temp)
  22:                 tap=j,temp=dis[j];
  23:         }
  24:         visit[tap]=1;
  25:         for(j=1;j<=n;j++)
  26:         {
  27:             if(!visit[j]&&dis[j]>dis[tap]+map[tap][j])
  28:                 dis[j]=dis[tap]+map[tap][j];
  29:         }
  30:     }
  31:     cout<<dis[n]<<endl;
  32: }
  33: int main()
  34: {
  35:     int T,N;
  36:     while(cin>>T>>N)
  37:     {
  38:         int i,j,a,b,p;
  39:         for(i=1;i<=N;i++)
  40:         {
  41:             for(j=1;j<=N;j++)
  42:                 map[i][j]=inf;
  43:             map[i][i]=0;
  44:         }
  45:         for(i=1;i<=T;i++)
  46:         {
  47:             cin>>a>>b>>p;
  48:             if(map[a][b]>p)
  49:             map[a][b]=map[b][a]=p;
  50:         }
  51:         djk(N);
  52:     }
  53:     return 0;
  54: }