1. 程式人生 > >CodeForces 589J Cleaner Robot

CodeForces 589J Cleaner Robot

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