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 |
循环+BFS~为什么TLE 帮忙看看(152行)#include <iostream> #include <queue> using namespace std; struct Position { int r, c, s; Position( int x, int y, int z ) :r( x ), c( y ), s( z ){}; Position(){} }; int l_process(); int r_process(); int bfs(); queue<Position> q; int sr, sc, er, ec; int w, h; char maze[40][40]; bool v[40][40]; const int move[4][2] = { 0, -1, -1, 0, 0, 1, 1, 0 }; int main() { int c, i, j; scanf( "%d", &c ); while ( c-- ) { scanf( "%d%d", &w, &h ); char ctemp; for ( i = 0; i < h; ++i ) { scanf( "%c", &ctemp ); for ( j = 0; j < w; ++j ) { scanf( "%c", &maze[i][j] ); if ( maze[i][j] == 'S' ) sr = i, sc = j; if ( maze[i][j] == 'E' ) er = i, ec = j; } } cout << l_process() << ' ' << r_process() << ' ' << bfs() << endl; } return 0; } int l_process() { int state; if ( sr == h - 1 ) state = 0; else if ( sc == 0 ) state = 1; else if ( sr == 0 ) state = 2; else if ( sc == w - 1 ) state = 3; int step = 1, rt = sr, ct = sc; while ( maze[rt][ct] != 'E' ) { if ( maze[rt + move[state][0]][ct + move[state][1]] == '.' ) { ++step; rt += move[state][0]; ct += move[state][1]; state = ( state + 3 ) % 4; continue; } while ( !( maze[rt + move[state][0]][ct + move[state][1]] == '#' && maze[rt + move[( state + 1 ) % 4][0]][ct + move[( state + 1 ) % 4][1]] == '.' )) { if ( maze[rt + move[state][0]][ct + move[state][1]] == 'E' ) { return ++step; } state = ( state + 1 ) % 4; } ++step; rt += move[( state + 1 ) % 4][0]; ct += move[( state + 1 ) % 4][1]; } return step; } int r_process() { int state; if ( sr == h - 1 ) state = 0; else if ( sc == 0 ) state = 1; else if ( sr == 0 ) state = 2; else if ( sc == w - 1 ) state = 3; int step = 1, rt = sr, ct = sc; while ( maze[rt][ct] != 'E' ) { if ( maze[rt + move[( state + 2 ) % 4][0]][ct + move[( state + 2 ) % 4][1]] == '.' ) { ++step; rt += move[( state + 2 ) % 4][0]; ct += move[( state + 2 ) % 4][1]; state = ( state + 1 ) % 4; continue; } while ( !( maze[rt + move[( state + 2 ) % 4][0]][ct + move[( state + 2 ) % 4][1]] == '#' && maze[rt + move[( state + 1 ) % 4][0]][ct + move[( state + 1 ) % 4][1]] == '.' )) { if ( maze[rt + move[( state + 2 ) % 4][0]][ct + move[( state + 2 ) % 4][1]] == 'E' ) { return ++step; } state = ( state + 3 ) % 4; } ++step; rt += move[( state + 1 ) % 4][0]; ct += move[( state + 1 ) % 4][1]; } return step; } int bfs() { while ( !q.empty()) q.pop(); memset( v, 0, sizeof v ); q.push( Position( sr, sc, 1 )); v[sr][sc] = true; int row, col, i; Position pos; while ( !q.empty()) { pos = q.front(); q.pop(); for ( i = 0; i < 4; ++i ) { row = pos.r + move[i][0]; col = pos.c + move[i][1]; if ( row >= 0 && row < h && col >= 0 && col < w ) { if ( maze[row][col] == 'E' ) return ++pos.s; if ( maze[row][col] == '.' ) { q.push( Position( row, col, pos.s + 1 )); } } } } return -1; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator