Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
这道题太郁闷了,用dijkstra应该可以过呀,重边也考虑过了,但是还是不停的wa,难道是有向图#include<iostream> #include<fstream> #include<iomanip> #define MAXNUM 101 using namespace std; unsigned int Edge[1001][1001]; unsigned int dist[1001]; bool s[1001]; void shortPath(int n,int v){ int i,j,w; for(i=1;i<=n;i++){ dist[i]=Edge[i][v]; s[i]=0; } s[v]=1;dist[v]=0; for(i=0;i<n-1;i++){ unsigned int min=MAXNUM; int u=v; for(j=1;j<=n;j++){ if(!s[j]&&dist[j]<min){ u=j; min=dist[j]; } } s[u]=1; for(w=1;w<=n;w++){ if( !s[w] && Edge[u][w]<MAXNUM && dist[w]>Edge[u][w]+dist[u]){ dist[w]=Edge[u][w]+dist[u]; } } } } int main(){ int T,N; //ifstream cin("tmp.txt"); cin>>T>>N; int i,j; for(i=1;i<=N;i++){ for(j=1;j<=N;j++){ Edge[i][j]=MAXNUM; } } for(i=1;i<=N;i++){ Edge[i][i]=0; } for(i=0;i<T;i++){ int x,y,tmp; scanf("%d %d %d",&x,&y,&tmp); if(tmp<Edge[x][y]){ Edge[x][y]=tmp; Edge[y][x]=tmp; } } shortPath(N,N); /* for(i=1;i<=N;i++){ for(j=1;j<=N;j++){ cout<<setw(5)<<Edge[i][j]<<' '; } cout<<endl; } */ cout<<dist[1]<<endl; system("pause"); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator