CodeForces - 589J(DFS)
题目链接: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)的更多相关文章
- CodeForces - 589J —(DFS)
Masha has recently bought a cleaner robot, it can clean a floor without anybody's assistance. Schema ...
- codeforces 731C(DFS)
题目链接:http://codeforces.com/contest/731/problem/C 题意:有n只袜子(1~n),k种颜色(1~k),在m天中,左脚穿下标为l,右脚穿下标为r的袜子,问最少 ...
- CodeForces - 95B(DFS)
题目链接:http://codeforces.com/problemset/problem/95/B 题目大意:给你一个正整数n (1 ≤ n ≤ 10100000),求不大小于它的超级幸运数字(超级 ...
- codeforces 723D(DFS)
题目链接:http://codeforces.com/problemset/problem/723/D 题意:n*m的矩阵中,'*'代表陆地,'.'代表水,连在一起且不沿海的水形成湖泊.问最少填多少块 ...
- Cleaner Robot - CodeForces 589J(搜索)
有一个M*N的矩阵,有一个会自动清洁的机器人,这个机器人会按照设定好的程序来打扫卫生,如果当前方向前面可以行走,那么直接走,如果不可以走那么会向右转动90度,然后回归上一步判断.求机器人最多能打扫的面 ...
- Codeforces 761E(DFS)
E. Dasha and Puzzle time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces 115A- Party(DFS)
A. Party time limit per test 3 seconds memory limit per test 256 megabytes input standard input outp ...
- LeetCode Subsets II (DFS)
题意: 给一个集合,有n个可能相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: 看这个就差不多了.LEETCODE SUBSETS (DFS) class Solution { publ ...
- LeetCode Subsets (DFS)
题意: 给一个集合,有n个互不相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: DFS方法:由于集合中的元素是不可能出现相同的,所以不用解决相同的元素而导致重复统计. class Sol ...
随机推荐
- Microsoft Visual Studio Ultimate 2013密钥
Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9Visual Studio Premium 2013 KEY(密钥): ...
- php redis常用方法代码例子
1,connect 描述:实例连接到一个Redis.参数:host: string,port: int返回值:BOOL 成功返回:TRUE;失败返回:FALSE 示例: <?php $redis ...
- WorldCount代码检查与优化——软件测试第三次作业
合作者:201631062222,201631062232 代码地址:https://gitee.com/biubiubiuLYQ/ceshi_secend 本次作业链接地址:https://edu. ...
- k8s使用glusterfs做存储
一.安装glusterfs https://www.cnblogs.com/zhangb8042/p/7801181.html 环境介绍; centos 7 [root@k8s-m ~]# cat / ...
- jQ append 添加html 及字符串拼接
如图,我要拼接这样一段html: 点击下边添加按钮,不断添加这段Html html: <div class="x_addtable"> <div class=&q ...
- dede:field name=’position’标签调用 主页改成英文Home和改变符号
在用dede:field name=’position’ 这个标签的时候我们调用的这个就是中文的,出现的是主页>+相应的栏目 ,那么这个问题怎么改成英文的呢?有好多大虾都说找到dede安装目录 ...
- Scrapy网络爬虫框架的开发使用
1.安装 2.使用scrapy startproject project_name 命令创建scrapy项目 如图: 3.根据提示使用scrapy genspider spider_name dom ...
- vscode git设置远程仓库码云
https://www.cnblogs.com/klsw/p/9080041.html
- LoadRunner Vuser接口测试脚本 Post举例
发送内容为JSON的POST请求需要加入"EncType=application/json",表单参数不需要.(JAVA API) // POST接口调用 web.custom_r ...
- 【C/C++】实现龙贝格算法
1. 复化梯形法公式以及递推化 复化梯形法是一种有效改善求积公式精度的方法.将[a,b]区间n等分,步长h = (b-a)/n,分点xk = a + kh.复化求积公式就是将这n等分的每一个小区间进行 ...