题目链接

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

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

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int dx[]= {-,,,};
int dy[]= {,,,-};
int vis[][][];
int n,m,k;
char c[][];
int sx,sy;
int sum,d;
void init()
{
sum=;
sx=-;
sy=-;
memset(vis,,sizeof(vis));
for(int i=; i<n; i++)
{
scanf("%s",c[i]);
for(int j=; j<m; j++)
{
if(c[i][j]=='U')
{
sx=i,sy=j;
d=;
}
if(c[i][j]=='R')
{
sx=i,sy=j;
d=;
}
if(c[i][j]=='D')
{
sx=i,sy=j;
d=;
}
if(c[i][j]=='L')
{
sx=i,sy=j;
d=;
}
}
}
}
void dfs(int i,int j,int d)
{
if(c[i][j]=='.')
{
sum++;
c[i][j]='#';
}
for(k=;k<;k++)
{
int td=(k+d)%;
int x=i+dx[td];
int y=j+dy[td];
if(x>=&&x<n&&y>=&&y<m&&c[x][y]!='*') //走
{
if(vis[x][y][td]) return; //走过的路
vis[x][y][td]=;
dfs(x,y,td);
return ;//继续往下走 不是传统的栈深搜
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
init();
dfs(sx,sy,d);
printf("%d\n",sum);
}
return ;
}

CodeForces 589J Cleaner Robot的更多相关文章

  1. CodeForces 589J Cleaner Robot (DFS,或BFS)

    题意:给定n*m的矩阵,一个机器人从一个位置,开始走,如果碰到*或者边界,就顺时针旋转,接着走,问你最后机器人最多能走过多少格子. 析:这个题主要是题意读的不大好,WA了好几次,首先是在*或者边界才能 ...

  2. 2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest J Cleaner Robot

    Cleaner RobotCrawling in process... Crawling failed Time Limit:2000MS     Memory Limit:524288KB     ...

  3. CodeForces - 589J —(DFS)

    Masha has recently bought a cleaner robot, it can clean a floor without anybody's assistance. Schema ...

  4. CodeForces 24D Broken robot(期望+高斯消元)

    CodeForces 24D Broken robot 大致题意:你有一个n行m列的矩形板,有一个机器人在开始在第i行第j列,它每一步会随机从可以选择的方案里任选一个(向下走一格,向左走一格,向右走一 ...

  5. Cleaner Robot - CodeForces 589J(搜索)

    有一个M*N的矩阵,有一个会自动清洁的机器人,这个机器人会按照设定好的程序来打扫卫生,如果当前方向前面可以行走,那么直接走,如果不可以走那么会向右转动90度,然后回归上一步判断.求机器人最多能打扫的面 ...

  6. Codeforces 922 C - Robot Vacuum Cleaner (贪心、数据结构、sort中的cmp)

    题目链接:点击打开链接 Pushok the dog has been chasing Imp for a few hours already. Fortunately, Imp knows that ...

  7. 【Codeforces 922D】Robot Vacuum Cleaner

    [链接] 我是链接,点我呀:) [题意] 让你把n个字符串重新排序,然后按顺序连接在一起 使得这个组成的字符串的"sh"子序列最多 [题解] /* * 假设A的情况好于B * 也就 ...

  8. Codeforces 1154D - Walking Robot - [贪心]

    题目链接:https://codeforces.com/contest/1154/problem/D 题解: 贪心思路,没有太阳的时候,优先用可充电电池走,万不得已才用普通电池走.有太阳的时候,如果可 ...

  9. CodeForces - 589J(DFS)

    题目链接:http://codeforces.com/problemset/problem/589/J 题目大意:一个机器人打扫一个密闭的房间,房间由一个矩形构成,'*'表示家具,'.'表示该位置为空 ...

随机推荐

  1. linux基本命令

    常用命令: w 查看登入用户(第一行为主机负载) ifconfig -a 查看所有网络 dhclient 自动获取IP地址 关机命令 init0 shutdown -h now 重启命令 init 6 ...

  2. Automated Memory Analysis

    catalogue . 静态分析.动态分析.内存镜像分析对比 . Memory Analysis Approach . volatility: An advanced memory forensics ...

  3. UEFI模式安装Win10和Linux双系统

    最近心血来潮,想装一个Linux.Windows双系统,吸取上次安装的经验,这次一定都要使用UEFI模式启动,需要注意的是必须是支持此种启动模式的系统(一般解压之后都有efi文件夹不需要刻录),这次遇 ...

  4. sass接触

    第一句话就是棒棒的,我爱上了. 看了真阿当的文章:<2016年前端技术观察> http://weibo.com/ttarticle/p/show?id=230940405256054051 ...

  5. 将文件移出版本控制 (Revision Control)

    两条重要的 Git 命令: git rm -r -n --cached /path/to/the/directory git rm -r --cached /path/to/the/directory ...

  6. gdb可以调试python的pdb么

    1.如题: gdb可以调试python的pdb么? 答案:可以,实验如下. 2.实验: 生成一个a.py代码文件,代码如下: import pdb a = 1 print "111" ...

  7. svn error

    svn: E205009: Local, non-commit operations do not take a log message or revision properties svn copy ...

  8. Markdown与标记语言

    Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的语法十分简单.常用的标记符号也不 ...

  9. 换行的css属性

    //正常换行  word-break:keep-all;word-wrap:normal; //下面这行是自动换行  word-break:break-all;word-wrap:break-word ...

  10. vim删除以#,空格开头的行

    1,删除以#号开头的行: :g/^#/d :%s/^#.*\n 2,删除以空格开头的行: :g/^\s/d                “\s代表空格” :%s/^\s.*\n 3,删除以空格#开头 ...