标签:
有一个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} }; int M, N; char G[MAXN][MAXN]; bool v[MAXN][MAXN][4]; void DFS(int k, int x, int y, int &ans) { 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; }
Cleaner Robot - CodeForces 589J(搜索)
标签:
原文地址:http://www.cnblogs.com/liuxin13/p/4912313.html