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 |
WA了25次了 新突破!!!#include <iostream> using namespace std; int G[1008][1008]; int D[1008]; void dijkstra(int v0,int n) { int i; short int *flag=new short int [n]; for(i=0;i<n;i++) { D[i]=G[v0][i]; flag[i]=0; } D[v0]=0;flag[v0]=1; int tempn=n-1; while(tempn--)//循环n-1次 { int Dpos; int min=1000; for(i=0;i<n;i++) { if(flag[i]==0) if(D[i]<min) { min=D[i]; Dpos=i; } } flag[Dpos]=1; for(i=0;i<n;i++) if(flag[i]==0) if((D[Dpos]+G[Dpos][i])<D[i]) { D[i]=(D[Dpos]+G[Dpos][i]); } } delete [] flag; } void rev(int n) { int i,j; int temp; for(i=0;i<(n-1);i++) for(j=i+1;j<n;j++) { temp=G[i][j]; G[i][j]=G[j][i]; G[j][i]=temp; } } void out(int n); void outt(int n,int *distt); int main() { int i,j; for(i=0;i<1008;i++) for(j=0;j<1008;j++) if(i==j)G[i][j]=0; else G[i][j]=1000; int n,m,x; cin>>n>>m>>x; while(m--) { int s,d,we; cin>>s>>d>>we; G[s-1][d-1]=we; } // out(n); dijkstra(x-1,n); // outt(n,D); int *d1=new int [n]; for(i=0;i<n;i++)d1[i]=D[i]; rev(n); // out(n); dijkstra(x-1,n); // outt(n,D); int max=0; for(i=0;i<n;i++) if(i!=(x-1)) if(D[i]!=1000&&d1[i]!=1000) if((d1[i]+D[i])>max)max=(d1[i]+D[i]); cout<<max<<endl; return 0; } void out(int n) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) if(i==j)cout<<0<<" "; else if(G[i][j]==1000)cout<<"~ "; else cout<<G[i][j]<<" "; cout<<endl<<endl; } } void outt(int n,int *distt) { int i; for(i=0;i<n;i++) if(distt[i]==1000)cout<<"~ "; else cout<<distt[i]<<" "; cout<<endl; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator