hdu3790
2016-01-15 00:00
134 查看
http://acm.hdu.edu.cn/showproblem.php?pid=3790
View Code
wrong answer的代码:帮我看看错哪儿了?哎,有什么特殊例子啊
View Code
View Code
#include < iostream > #define M 1001 #define Max 0x7fffffff using namespace std; int n,m; int a,b,d,p; int s,t; int map[M][M]; int cost[M][M]; int de[M]; int co[M]; int visit[M]; int len; int _min; void Init() { int i,j; for (i = 0 ;i <= n;i ++ ) { for (j = 0 ;j <= n;j ++ ) { map[i][j] = Max; cost[i][j] = Max; } } } void DJ() { int i,j,p,k; memset(visit , 0 , sizeof (visit)); for (i = 1 ;i <= n;i ++ ) de[i] = co[i] = Max; de[s] = 0 ; co[s] = 0 ; for (i = 1 ;i <= n;i ++ ) { _min = Max; k = 0 ; for (j = 1 ;j <= n;j ++ ) { if ( ! visit[j] && de[j] < _min) { _min = de[j]; k = j; } } if (_min == Max) break ; visit[k] = 1 ; for ( p = 1 ; p <= n; p ++ ) { if ( ! visit[p] && map[k][p] != Max) { if (de[p] > de[k] + map[k][p]) { de[p] = de[k] + map[k][p]; co[p] = co[k] + cost[k][p]; } else if ( de[p] == de[k] + map[k][p] && co[p] > co[k] + cost[k][p] ) { co[p] = co[k] + cost[k][p]; } } } } } int main() { while ( cin >> n >> m, n + m ) { Init(); int i; for (i = 0 ;i < m;i ++ ) { cin >> a >> b >> d >> p; if ( map[a][b] > d) { map[a][b] = map[b][a] = d; cost[a][b] = cost[b][a] = p; } } cin >> s >> t; DJ(); cout << de[t] << " " << co[t] << endl; } return 0 ; }
wrong answer的代码:帮我看看错哪儿了?哎,有什么特殊例子啊
View Code
#include < iostream > #define M 1001 #define Max 0x7fffffff using namespace std; int n,m; int a,b,d,p; int s,t; int map[M][M]; int cost[M][M]; int visit[M]; int _min; void Init() { int i,j; for (i = 0 ;i <= n;i ++ ) { for (j = 0 ;j <= n;j ++ ) { map[i][j] = Max; cost[i][j] = Max; } } } void DJ() { int i,j,p,k; for (i = 1 ;i <= n;i ++ ) { _min = Max; k = 0 ; for (j = 1 ;j <= n;j ++ ) { if ( ! visit[j] && map[ 0 ][j] < _min) { _min = map[ 0 ][j]; k = j; } } if (_min == Max) break ; visit[k] = 1 ; for ( p = 1 ; p <= n; p ++ ) { if ( ! visit[p] && map[k][p] != Max) { if (map[ 0 ][p] > map[ 0 ][k] + map[k][p]) { map[ 0 ][p] = map[ 0 ][k] + map[k][p]; cost[ 0 ][p] = cost[ 0 ][k] + cost[k][p]; } else if ( map[ 0 ][p] = map[ 0 ][k] + map[k][p] && cost[ 0 ][p] > cost[ 0 ][k] + cost[k][p] ) { cost[ 0 ][p] = cost[ 0 ][k] + cost[k][p]; } } } } } int main() { while ( cin >> n >> m, n + m ) { Init(); int i; for (i = 0 ;i < m;i ++ ) { cin >> a >> b >> d >> p; if ( map[a][b] > d) { map[a][b] = map[b][a] = d; cost[a][b] = cost[b][a] = p; } } cin >> s >> t; map[ 0 ][s] = 0 ; cost[ 0 ][s] = 0 ; memset(visit , 0 , sizeof (visit)); DJ(); cout << map[ 0 ][t] << " " << cost[ 0 ][t] << endl; } return 0 ; }