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 <stdio.h> using namespace std; const int MAXN = 1000; const int inf = 0x3fffffff; int rel[MAXN+10][MAXN+10]; int dist[MAXN+10]; int pre[MAXN+10]; bool visit[MAXN+10]; int ans[MAXN+10]; int cnt; int m, n; void dijkstra() { for(int i = 1; i <= n; i++) { visit[i] = false; dist[i] = inf; } dist[1] = 0; for(int i = 1; i <= n; i++) { int mmin = inf; int pos; for(int j = 1; j <= n; j++) { if(!visit[j] && dist[j]<mmin) { mmin = dist[j]; pos = j; } } visit[pos] = true; for(int j = 1; j <= n; j++) { if(!visit[j] && dist[j] > dist[pos]+rel[pos][j]) { pre[j] = pos; dist[j] = dist[pos]+rel[pos][j]; } } } } int main() { //freopen("in.txt", "r", stdin); while(scanf("%d%d", &m, &n) != EOF) { cnt = 0; for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) rel[i][j] = inf; } for(int i = 1; i <= m; i++) { int u, v; scanf("%d%d", &u, &v); rel[u][v] = 1; } dijkstra(); if(dist[n] == inf) printf("-1\n"); else { ans[cnt++] = n; int tmp = pre[n]; while(tmp != 1) { ans[cnt++] = tmp; tmp = pre[tmp]; } ans[cnt++] = 1; printf("%d\n", cnt); for(int i = cnt-1; i >= 0; i--) printf("%d\n", ans[i]); } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator