• CodeForces 589J Cleaner Robot


    题目链接

    题意:一个机器人打扫卫生,URDL代表初始时机器人面对的方向上右下左。 ' . ' 代表可以打扫的, ' * ' 代表家具,如果机器人遇到家具就顺时针转90度,问机器人能打扫多少面积。

    题解:记录机器人走过每个点时所面对的方向,如果走过了这个点走过的方向就不用走了,模拟机器人的行走过程即可。只记录机器人第一次走过某点时面对的方向也可以。数据范围较小,开个三维vis数组也行。

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    using namespace std;
    int dx[4]= {-1,0,1,0};
    int dy[4]= {0,1,0,-1};
    int vis[33][33][4];
    int n,m,k;
    char c[33][33];
    int sx,sy;
    int sum,d;
    void init()
    {
        sum=1;
        sx=-1;
        sy=-1;
        memset(vis,0,sizeof(vis));
        for(int i=0; i<n; i++)
        {
            scanf("%s",c[i]);
            for(int j=0; j<m; j++)
            {
                if(c[i][j]=='U')
                {
                    sx=i,sy=j;
                    d=0;
                }
                if(c[i][j]=='R')
                {
                    sx=i,sy=j;
                    d=1;
                }
                if(c[i][j]=='D')
                {
                    sx=i,sy=j;
                    d=2;
                }
                if(c[i][j]=='L')
                {
                    sx=i,sy=j;
                    d=3;
                }
            }
        }
    }
    void dfs(int i,int j,int d)
    {
        if(c[i][j]=='.')
        {
            sum++;
            c[i][j]='#';
        }
        for(k=0;k<4;k++)
        {
            int td=(k+d)%4;
            int x=i+dx[td];
            int y=j+dy[td];
            if(x>=0&&x<n&&y>=0&&y<m&&c[x][y]!='*') //
            {
                if(vis[x][y][td]) return; //走过的路
                vis[x][y][td]=1;
                dfs(x,y,td);
                return ;//继续往下走 不是传统的栈深搜
            }
        }
    }
    int main()
    {
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            init();
            dfs(sx,sy,d);
            printf("%d
    ",sum);
        }
        return 0;
    }
  • 相关阅读:
    模拟光照中的凹凸纹理原理和应用
    Visual Studio 2010 SP1正式开放下载
    同桌的你网工版
    [转载]同桌的你程序员版
    学习计划:SSIS
    基于Java的HTML解析器
    初次使用NHibernate遇到的问题
    .NET下开源CMS系统汇总
    MyEclipse、Tomcat启动项目报错
    VBA 分文件夹 分excel
  • 原文地址:https://www.cnblogs.com/Ritchie/p/6212530.html
Copyright © 2020-2023  润新知