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!!!应该不难的,可是就是WA,高手们指点一下,谢谢了!!!#include <iostream> using namespace std; int map[501][501]; int fire[100]; int n,m; void Floyd() // 求出全源最短路径; { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) if( (map[j][i]+map[i][k]<map[j][k]||map[j][k]==-1) && map[j][i]!=-1 && map[i][k]!=-1 && j!=k ) map[j][k] = map[j][i] + map[i][k]; } int main() { bool arrived[501]; while(cin>>m>>n) { memset(arrived,false,sizeof(arrived)); for(int i=0;i<m;i++) // 读入救火站 { cin>>fire[i]; arrived[fire[i]] = true; } for(int i=0;i<=n;i++) // 初始化地图 { for(int j=0;j<=n;j++) map[i][j] = -1; } int t1,t2,t3; for(int i=0;i<n;i++) // 读入地图 { cin>>t1>>t2>>t3; map[t1][t2] = t3; map[t2][t1] = t3; } Floyd(); // 求出全源最短路径; /* for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) cout<<map[i][j]<<" "; cout<<endl; } */ int result[501]; int all = 0; for(int i=1;i<=n;i++) // 求出现有的各点到救火站最短距 { int sum = 999999; for(int j=0;j<m;j++) { if(i==fire[j]) { sum = 0; break; } if(sum>map[i][fire[j]]) sum = map[i][fire[j]]; } result[i] = sum; all = all + sum; } /* cout<<all<<endl; for(int i=1;i<=n;i++) cout<<result[i]<<" "; cout<<endl; */ int maxn = 999999; int res; for(int i=1;i<=n;i++) // 一个一个枚举 { if(arrived[i]==true) continue; int temp = all; int sum = 999999; for(int j=1;j<=n;j++) { if(i==j) temp = temp - result[i]; else if(map[j][i]<result[j]) temp = temp - result[j] + map[j][i]; } //cout<<i<<" "<<temp<<endl; if(temp<maxn) { maxn = temp; res = i; } } //cout<<maxn<<endl; cout<<res<<endl; } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator