码迷,mamicode.com
首页 > 其他好文 > 详细

Cleaner Robot - CodeForces 589J(搜索)

时间:2015-10-26 22:05:15      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:

有一个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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!