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 |
题目的数据范围给小了,这个题目就是坑爹!一开始设置三维数组的范围均是30,结果WA,后来设置为50,还是WA,最后设置为60,奇迹发生了,居然A了。害的我检查了半天程序,想想这么简单的题目不应该写错丫。给个能通过的代码: #include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; int L,R,C; struct Point{ int level,row,col; int count; Point( int l=0, int r=0, int c=0, int ct=0 ) : level(l), row(r), col(c), count(ct) {} void show() { cout << "level=" << level << ", row=" << row << ", col=" << col <<endl; } void move( int dir[3], Point& pt ){ pt.level = level + dir[0]; pt.row = row + dir[1]; pt.col = col + dir[2]; pt.count = count+1; } bool inRange(){ return -1 < level && level < L && -1 < row && row < R && -1 < col && col < C; } }; char d[60][60][60]; bool v[60][60][60]; Point s; #define SETV( pt ) ( v[pt.level][pt.row][pt.col] = true ) #define GETV( pt ) v[pt.level][pt.row][pt.col] #define GETCHAR( pt ) d[pt.level][pt.row][pt.col] int dir[6][3] = { { 1, 0, 0 }, {-1, 0, 0 }, { 0, 1, 0 }, { 0,-1, 0 }, {0, 0, 1}, {0, 0, -1} }; int bfs(){ queue<Point> q; q.push(s); SETV( s ); Point p, nextPt; while( !q.empty() ){ p = q.front(); q.pop(); for( int i=0; i<6; ++i ){ p.move( dir[i], nextPt ); if( 'E' == GETCHAR( nextPt ) ) return nextPt.count; if( nextPt.inRange() && '.' == GETCHAR(nextPt) && !GETV( nextPt ) ){ SETV( nextPt ); q.push( nextPt ); } } } return 0; } int main(){ char* str; char c; while( scanf( "%d%d%d", &L, &R, &C ), L ){ for( int i=0; i<L; ++i ){ for( int j=0; j<R; ++j ){ str = d[i][j]; scanf( "%s", str ); for( int k=0; k<C; ++k ){ if( 'S' == str[k] ){ s.level = i; s.row = j; s.col = k; s.count = 0; } } } } memset( v, 0, sizeof(v) ); int res = bfs(); if( res ) printf( "Escaped in %d minute(s).\n", res ); else printf( "Trapped!\n" ); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator