题目链接: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: }
浙公网安备 33010602011771号