题目链接

http://poj.org/problem?id=1573

题意

一个机器人在给定的迷宫中行走,在迷宫中的特定位置只能按照特定的方向行走,有两种情况:①机器人按照方向序列走出迷宫,这时输出机器人走出迷宫的步数;②机器人在迷宫中陷入了循环,这种情况要输出机器人陷入循环前所走的步数以及循环的步数。

思路

走迷宫问题一般使用BFS或DFS求解,这里我使用DFS来求解。机器人能顺利走出迷宫的情况比较容易判断,主要是如何判断机器人陷入了循环以及陷入循环后的输出。我使用visit[r][c]来记录位置(r,c)是否被访问过,使用steps[r][c]记录机器人从起点到点(r,c)所经历的步数。假设(r,c)按照指令走了一步后的坐标为(nr,nc),若(nr,nc)已不在迷宫中,则输出结果;若(nr,nc)还在迷宫中,若该位置未被访问过,则按照指令走下一步,若(nr,nc)被访问过,则说明陷入了循环,位置(nr,nc)即是循环的起点,steps[nr][nc]-1即陷入循环前机器人所行走的步数,steps[r][c]-steps[nr][nc]+1即为循环的步数。

代码

 #include <iostream>
#include <cstring>
#include <cstdio>
using namespace std; const int N = ;
char ins[N][N];
int visit[N][N];
int steps[N][N];
int m, n, sc; void dfs(int r, int c, int stp)
{
int nr, nc;
switch(ins[r][c])
{
case 'N':
nr = r - ;
nc = c;
break;
case 'E':
nr = r;
nc = c + ;
break;
case 'S':
nr = r + ;
nc = c;
break;
case 'W':
nr = r;
nc = c - ;
break;
} if(nr>=&&nr<m && nc>=&&nc<n) //还在迷宫中
{
if(!visit[nr][nc]) //(nr, nc)未被访问
{
steps[nr][nc] = stp + ;
visit[nr][nc] = ;
dfs(nr, nc, stp+);
}
else //出现循环
{
printf("%d step(s) before a loop of %d step(s)\n", steps[nr][nc]-, stp-steps[nr][nc]+);
return;
}
}
else //走出迷宫
{
printf("%d step(s) to exit\n", stp);
return;
}
} int main()
{
//freopen("poj1573.txt", "r", stdin);
while(cin>>m>>n>>sc && m)
{
memset(visit, , sizeof(visit));
memset(steps, , sizeof(steps)); for(int i=; i<m; i++)
cin>>ins[i]; sc--;
visit[][sc] = ;
steps[][sc] = ;
dfs(, sc, );
}
return ;
}

poj1573 Robot Motion(DFS)的更多相关文章

  1. POJ 1573 Robot Motion(BFS)

    Robot Motion Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12856   Accepted: 6240 Des ...

  2. POJ 1573 Robot Motion(模拟)

    题目代号:POJ 1573 题目链接:http://poj.org/problem?id=1573 Language: Default Robot Motion Time Limit: 1000MS ...

  3. poj1573&amp;&amp;hdu1035 Robot Motion(模拟)

    转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接: HDU:pid=1035">http://acm.hd ...

  4. HDU 1035 Robot Motion(dfs + 模拟)

    嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1035 这道题比较简单,但自己一直被卡,原因就是在读入mp这张字符图的时候用了scanf被卡. ...

  5. hdu 1035 Robot Motion(模拟)

    Problem Description A robot has been programmed to follow the instructions in its path. Instructions ...

  6. HDOJ.1342 Lotto (DFS)

    Lotto [从零开始DFS(0)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HDOJ.1010 Tempter of ...

  7. LeetCode Subsets II (DFS)

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

  8. LeetCode Subsets (DFS)

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

  9. HDU 2553 N皇后问题(dfs)

    N皇后问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 在 ...

随机推荐

  1. CSS文字溢出部分自动用"..."代替

    CSS文字溢出部分自动用"..."代替 如html部分: <h4><马尔代夫双鱼岛Olhuveli4 晚6 日自助游></h4> <p&g ...

  2. sourceTree的下载与安装

    一. SourceTree是什么? 一个拥有可视化界面的项目版本控制的软件,适用于git项目管理,在window和mac均可使用. 二. SourceTree下载 下载地址:SourceTree官网 ...

  3. 关于Linux运维的一些题目总结

    一.有文件file1 1.查询file1里面空行的所在行号 awk ‘{if($0~/^$/)print NR}’ fileorgrep -n ^$ file |awk ‘BEGIN{FS=”:”}{ ...

  4. 笔记(二)TabLayout + ViewPager + FragmentPagerAdapter 组合用法

    TabLayout的xml文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  5. .net core 中 identity server 4 之Server简单示例

    Steps: 1.新建一个ASP.NET Core Web项目,SigmalHex.IdentityServer: 2.安装包 Install-Package IdentityServer4 3.St ...

  6. js获取上、下级html元素 js删除html元素方法

    js获取下级html元素:htmlEle.childNode; js获取上级html元素:htmlEle.parentNode; js删除当前html元素: htmlEle.removeNode(tr ...

  7. 【BZOJ做题记录】07.07~?

    在NOI一周前重开一个坑 最后更新时间:7.08 07:38 7.06 下午做的几道CQOI题: BZOJ1257: [CQOI2007]余数之和sum:把k mod i写成k-k/i*i然后分段求后 ...

  8. python学习笔记(十五)之集合

    集合:对应数学中的集合类型.集合中的元素是唯一,且无序的. 创建集合 方法一:使用{},注意python会自动删除重复元素 >>> number = {1,2,3,4,3,2,1} ...

  9. 从docker到docker-compose部署一个nginx+flask+mysql+redis应用

    目的是把一个flask项目的mysql数据库.redis数据库.flask应用.nginx服务分别装到四个容器中,然后用docker-compose命令同时启动与关闭 一.安装docker Docke ...

  10. vps建站教程 CentOS6如何安装配置FTP服务器

    通过之前的几篇文章,我们都知道了如何配置PHP环境,也知道如何保护我们的vps以及如何绑定多个域名建设多个网站.有时候我们为了让我们的朋友也能用我们的vps建站又不想给他们太多权限,有时候我们想要当个 ...