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 ...
随机推荐
- spring AOP源码分析(二)
现在,我们将对代理对象的生成过程进行分析. 在springAOP源码分析(一)的例子中,将会生成哪些对象呢? 可以看到将会生成六个对象,对应的beanName分别是: userDao:目标对象 log ...
- Laravel技巧:使用load、with预加载 区别
1.使用load $posts = Post::all(); $posts->load('user'); 2.使用with $posts = Post::with('user')->all ...
- windows环境下protobuf的java操作{编译,序列化,反序列化}
google protocol buffer的使用和原理 概况: Protocol Buffers(也就是protobuf)是谷歌的语言中立的.平台中立的.可扩展的用于序列化结构化的数据: windo ...
- python之路--动态传参,作用域,函数嵌套
一 . 动态传参(重点) * , ** * 与 ** * 在形参位置. * 表示不定参数, 接收的是位置参数 接收到的位置参数的动态传参: 都是元组 def eat(*food): # 在形参这里 ...
- spring 给一个类 生成test
右击一个类,然后:GoTo==>test ,就可以新建这个类的测试用例了,简单粗暴, 如果想要不污染数据库,就在一个测试用例 的标签@Test 下面在加上@RollBack 这样: @Test ...
- 今日头条移动app广告激活数据API对接完整Java代码实现供大家参考》》》项目随记
这是自毕业后的第一篇博客,希望自己今后能养成写博客的一个好习惯.最近公司为了加速APP推广,采取在外部平台(如:今日头条)进行广告投放的方式,进行用户引流.因此我们需要对广告的激活数据进行一个检测,跟 ...
- QXcbConnection: Could not connect to display
import matplotlib; matplotlib.use('agg') 注意:要添加到所有matplotlib前面,否则不起作用
- Asp.Net Core get client IP
不废话,直接上代码,你懂得. public string GetRequestIP(bool tryUseXForwardHeader = true) { string ip = null; // t ...
- 学习Linux系统的态度及技巧
Linux作为一种简单快捷的操作系统,现在被广泛的应用.也适合越来越多的计算机爱好者学习和使用.但是对于Linux很多人可能认为很难,觉得它很神秘,从而对其避而远之,但事实真的是这样么?linux真的 ...
- 【C/C++】求解线性方程组的雅克比迭代与高斯赛德尔迭代
雅克比迭代: /* 方程组求解的迭代法: 雅克比迭代 */ #include<bits/stdc++.h> using namespace std; ][]; ]; void swapA( ...