class MazeMaker {
public:
int longestPath(vector <string> maze, int startRow, int startCol, vector <int> moveRow, vector <int> moveCol) {
const int H = maze.size();
const int W = maze[0].size();
const int D = moveRow.size();
const int inf = 1 << 24;
int cost[H][W];
fill( &cost[0][0], &cost[H-1][W], inf );
bool vis[H][W];
fill( &vis[0][0], &vis[H-1][W], false );
if( maze[startRow][startCol] == '.' ){
cost[startRow][startCol] = 0;
vis[startRow][startCol] = true;
}
queue< pair<int, int> > q;
for( q.push( make_pair(startRow, startCol) ); q.size(); q.pop() ){
pair<int, int> p = q.front();
for(int d=0; d<D; ++d){
int ni = p.first + moveRow[d];
int nj = p.second + moveCol[d];
if( ni < 0 || nj < 0 )continue;
if( H <= ni || W <= nj )continue;
if( vis[ni][nj] )continue;
if( maze[ni][nj] == 'X' )continue;
vis[ni][nj] = true;
cost[ni][nj] = cost[p.first][p.second] + 1;
q.push( make_pair(ni, nj) );
}
}
int ret = 0;
for(int i=0; i<H; ++i){
for(int j=0; j<W; ++j){
if( maze[i][j] == '.' )ret = max( ret, cost[i][j] );
}
}
return ret == inf ? -1 : ret;
}
};
7/12/2011
SRM453.5 Div1 Easy
250
登録:
コメントの投稿
(
Atom
)
0 件のコメント :
コメントを投稿