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....... 给几组BT的数据吧#include<stdio.h> #include<string.h> char map[105][105]; int id[105][105]; char m[105][105]; int cost[105][105]; int x, y; const int MAX = 200000000; int dx[13505], dy[13505]; int dxx[4] = { 0, 0, 1, -1 }; int dyy[4] = { 1, -1, 0, 0 }; int len; int v; void bfs( int xx, int yy ) { int head = 0, tail = 1, ttail, step = 0; int i, k, r, xxx, yyy; dx[0] = xx; dy[0] = yy; m[xx][yy] = '#'; while( head < tail ) { ttail = tail; step++; for( i = head; i < tail; i++ ) { for( r = 0; r < 4; r++ ) { xxx = dx[i]+dxx[r]; yyy = dy[i]+dyy[r]; if( xxx >= 0 && xxx < y && yyy >= 0 && yyy < x && m[xxx][yyy] != '#' ) { dx[ttail] = xxx; dy[ttail++] = yyy; if( m[xxx][yyy] == 'A' ) { cost[id[xx][yy]][id[xxx][yyy]] = step; cost[id[xxx][yyy]][id[xx][yy]] = step; } m[xxx][yyy] = '#'; } } } head = tail; tail = ttail; } } void MST() { int mincost[105], minans, min; int i, j, k; minans = 0; for( i = 1; i <= len; i++ ) { mincost[i] = cost[v][i]; } mincost[v] = -1; for( i = 1; i <= len; i++ ) { min = MAX; k = 0; for( j = 1; j <= len; j++ ) { if( mincost[j] > 0 && min > mincost[j] ) { min = mincost[j]; k = j; } } if( min == MAX )break; mincost[k] = -1; minans += min; for( j = 1; j <= len; j++ ) { if( cost[k][j] < mincost[j] ) { mincost[j] = cost[k][j]; } } } printf( "%d\n", minans ); } int main() { int i, j, r, k; int kcase; scanf( "%d", &kcase ); while( kcase-- ) { scanf( "%d %d", &x, &y ); len = 0; memset( id, 0, sizeof( id ) ); getchar(); for( i = 0; i < y; i++ ) { gets(map[i]); } for( i = 0; i < y; i++ ) { for( j = 0; j < x; j++ ) { if( map[i][j] == 'S' ) { map[i][j] = 'A'; id[i][j] = ++len; v = len; } else if( map[i][j] == 'A' ) { id[i][j] = ++len; } } } memset( cost, 0, sizeof( cost ) ); for( i = 0; i < y; i++ ) { for( j = 0; j < x; j++ ) { if( map[i][j] == 'A' ) { for( k = 0; k < y; k++ ) for( r = 0; r < x; r++ ) m[k][r] = map[k][r]; bfs( i, j ); } } } MST(); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator