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 |
这题PE怎么解决?如题 #include <iostream> #include <stdio.h> using namespace std; void print(int n){ printf("%d", n); if(n < 10) printf(" "); else printf(" "); } int main() { int N; scanf("%d", &N); int dir[22][22]; for(int i = 1; i <= N; i++){ for(int j = 1; j <= N; j++){ int temp; scanf("%d", &temp); if(temp >= 0){ dir[i][j] = temp; } else{ dir[i][j] = 1000000000; } } } int fire; scanf("%d", &fire); int statCnt = 0; int stat[22]; int tmp; while(scanf("%d", &tmp) > 0){ stat[statCnt] = tmp; statCnt++; } int dist[2][22][22]; int prev[2][22][22]; for(int i = 1; i <= N; i++){ for(int j = 1; j <= N; j++){ dist[0][i][j] = dir[i][j]; if(dir[i][j] < 1000000000) prev[0][i][j] = j; else prev[0][i][j] = -1; } } for(int i = 1; i <= N; i++){ int from = (i-1)%2, to = i%2; for(int j = 1; j <= N; j++){ for(int k = 1; k <= N; k++){ if(dist[from][j][i] + dist[from][i][k] < dist[from][j][k]){ dist[to][j][k] = dist[from][j][i] + dist[from][i][k]; prev[to][j][k] = prev[from][j][i]; } else{ dist[to][j][k] = dist[from][j][k]; prev[to][j][k] = prev[from][j][k]; } } } } int tar = N%2; for(int i = 1; i < statCnt; i++){ for(int j = i; j > 0; j--){ if(dist[tar][stat[j]][fire] >= dist[tar][stat[j-1]][fire]) break; int temp = stat[j]; stat[j] = stat[j-1]; stat[j-1] = temp; } } printf("Org Dest Time Path\n"); for(int i = 0; i < statCnt; i++){ print(stat[i]); print(fire); print(dist[tar][stat[i]][fire]); int init = stat[i]; while(init != fire){ print(init); init = prev[tar][init][fire]; } printf("%d\n", fire); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator