题目链接http://codeforces.com/problemset/problem/589/J

题目大意:一个机器人打扫一个密闭的房间,房间由一个矩形构成,'*'表示家具,'.'表示该位置为空,机器人只能扫空的位置,给出机器人的初位置及朝向,如果当前朝向不能再继续往前走了,机器人就会向右转,问一共能清理多少地方。

例:

输入:

2 3
U..
.*.

输出:

4

解题思路:方法应该有很多种,不过我用的DFS。需要注意的就是,机器人的朝向,只有当前方有障碍时,他才会右转。还有就是DFS的结束的条件,我们可以设置一个steps变量,机器人每走一步,steps就加一,因为格子至多100格,步数大于100时就结束搜索就行了,答案就是vis标记的个数。

详情见代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int dir[][]={{-,},{,},{,},{,-}};//四个方向,按顺时针,上,右,下,左
int n,m,vis[][]; //vis数组标记是否扫过
char map[][];
int x,y,steps; //steps记录机器人所走的步数 void dfs(int x1,int y1,int face)
{
if(steps>) return;
steps++;
//cout<<x1<<" "<<y1<<endl;
for(int i=;i<;i++)
{
int j=(i+face)%; //向机器人朝向的右方转
int dx=x1+dir[j][];
int dy=y1+dir[j][];
if(dx>=&&dx<n&&dy>=&&dy<m&&map[dx][dy]!='*')
{
vis[dx][dy]=;
dfs(dx,dy,j);
break;
}
}
return;
} int main()
{
cin>>n>>m;
char face;
int ans=;
steps=;
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
cin>>map[i][j];
if(map[i][j]=='U'||map[i][j]=='R'||map[i][j]=='D'||map[i][j]=='L')
{
x=i,y=j,face=map[i][j],vis[x][y]=;
}
}
}
//cout<<face<<endl;
if(face=='U') dfs(x,y,);
else if(face=='R') dfs(x,y,);
else if(face=='D') dfs(x,y,);
else dfs(x,y,);
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(vis[i][j]) ans++;
}
}
cout<<ans<<endl;
return ;
}

CodeForces - 589J(DFS)的更多相关文章

  1. CodeForces - 589J —(DFS)

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

  2. codeforces 731C(DFS)

    题目链接:http://codeforces.com/contest/731/problem/C 题意:有n只袜子(1~n),k种颜色(1~k),在m天中,左脚穿下标为l,右脚穿下标为r的袜子,问最少 ...

  3. CodeForces - 95B(DFS)

    题目链接:http://codeforces.com/problemset/problem/95/B 题目大意:给你一个正整数n (1 ≤ n ≤ 10100000),求不大小于它的超级幸运数字(超级 ...

  4. codeforces 723D(DFS)

    题目链接:http://codeforces.com/problemset/problem/723/D 题意:n*m的矩阵中,'*'代表陆地,'.'代表水,连在一起且不沿海的水形成湖泊.问最少填多少块 ...

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

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

  6. Codeforces 761E(DFS)

    E. Dasha and Puzzle time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. Codeforces 115A- Party(DFS)

    A. Party time limit per test 3 seconds memory limit per test 256 megabytes input standard input outp ...

  8. LeetCode Subsets II (DFS)

    题意: 给一个集合,有n个可能相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: 看这个就差不多了.LEETCODE SUBSETS (DFS) class Solution { publ ...

  9. LeetCode Subsets (DFS)

    题意: 给一个集合,有n个互不相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: DFS方法:由于集合中的元素是不可能出现相同的,所以不用解决相同的元素而导致重复统计. class Sol ...

随机推荐

  1. opencv2\flann\matrix.h(69): error C2059: 语法错误:“,”

    在提示错误的matrix.h头文件中,修改一下,在free前加上_ ,即FLANN_DEPRECATED void _free() .

  2. Angular MVC

    <!DOCTYPE html><html ng-app="myApp"><head lang="en"> <meta ...

  3. Flutter 常用工具类库common_utils

    地址:https://pub.flutter-io.cn/packages/common_utils#-readme-tab- Dart常用工具类库 common_utils 1.TimelineUt ...

  4. 转《JavaScript中的图片处理与合成》

    引言: 本系列现在构思成以下4个部分: 基础类型图片处理技术之缩放.裁剪与旋转(传送门): 基础类型图片处理技术之图片合成(传送门): 基础类型图片处理技术之文字合成(传送门): 算法类型图片处理技术 ...

  5. hive子查询

    如果集合中含有空值,不能使用not in的语法指令:但是可以使用in

  6. Git使用:Linux(Ubuntu 14.04 x64)下安装Git并配置连接GitHub

    github是一个非常好的网络代码托管仓库,知晓许久,但是一直没有用起来,最近才开始使用git管理自己的文档和代码. Git是非常强大的版本管理工具,今天就告诉大家,如何在Linux下安装GIt,并且 ...

  7. re正则表达式-1

    匹配/查找/替换/分割函数: import re re.match('aa','aabbcc') 返回对象中span为开始位置和结束位置 re.match('aa','bbaacc') #返回值为No ...

  8. Spring 的java 配置方式

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.1@Configuration 和 @Bean Spring的Java配置方式是通过 @Configuration 和 @ ...

  9. linux pstree命令

    pstree命令可以使进程以tree的形式显示 pstree -ssystemd─┬─UVPHostd───6*[{UVPHostd}] ├─acpid ├─2*[agetty] ├─crond ├─ ...

  10. 1.Java简介

    第一章 Java简介 开始上传一些自己画的思维导图 画的基本上是根据菜鸟教程Java的对应的图 会有一系列的图陆续放出来,不过博客上只有截图,具体的带注释的具体的图后续会放在git上,更新会加上git ...