CodeForces 589J Cleaner Robot
阿新 • • 發佈:2017-07-08
ring ++ != str bsp cnblogs style 方向 有一個
有一個M*N的矩陣,有一個會自動清潔的機器人,這個機器人會按照設定好的程序來打掃衛生,如果當前方向前面可以行走,那麽直接走,如果不可以走那麽會向右轉動90度,然後回歸上一步判斷。求機器人最多能打掃的面積是多少
一開始認為是走到之前清掃過的就停止搜索 後來知道是走到一個四個方向都走過的點才停止搜索
#include<stdio.h> #include<string.h> const int MAXN = 17; ///‘U‘, ‘R‘, ‘D‘ ‘L‘ int dir[4][2] = { {-1,0},{0,1},{1,0},{0,-1} }; //後面是前面90度 int M, N;char G[MAXN][MAXN]; bool v[MAXN][MAXN][4]; void DFS(int k, int x, int y, int &ans) //k紀錄當前方向 { if(G[x][y] == ‘.‘) { ans += 1; G[x][y] = ‘#‘; } for(int i=0; i<4; i++) { int nx = x+dir[(i+k)%4][0]; int ny = y+dir[(i+k)%4][1]; if(nx>=0&&nx<M && ny>=0&&ny<N && G[nx][ny]!=‘*‘) { if(v[nx][ny][(i+k)%4] == true) break; v[nx][ny][(i+k)%4] = true; DFS((i+k)%4, nx, ny, ans); break; } } } int main() { while(scanf("%d%d", &M, &N) != EOF) { memset(v, 0, sizeof(v)); int x, y, op; for(int i=0; i<M; i++) { scanf("%s", G[i]); for(int j=0; j<N; j++) { if(G[i][j] == ‘U‘) op = 0, x=i, y=j; if(G[i][j] == ‘R‘) op = 1, x=i, y=j; if(G[i][j] == ‘D‘) op = 2, x=i, y=j; if(G[i][j] == ‘L‘) op = 3, x=i, y=j; } } int ans = 1; DFS(op, x, y, ans); printf("%d\n", ans); } return 0; }
CodeForces 589J Cleaner Robot