题目链接

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. 题解【bzoj3240 [NOI2013]矩阵游戏】

    挖坑2333 等我把代码写完了再写

  2. MySQL查询和修改auto_increment的方法

    查询表名为tableName的auto_increment值: 复制代码 代码如下: SELECT AUTO_INCREMENT FROM information_schema.tables WHER ...

  3. libiconv的注意项

    编译后有用的头文件zlib.h和zconf.h,使用时#include "zlib.h". 其中有三个核心的函数: iconv_ticonv_open(constchar*toco ...

  4. IIS7.5 HTTP 错误500.19-Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效

    IIS7.5 HTTP 错误500.19-Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效 --------------------------------- ...

  5. How to ignore SSL certificate errors in Apache HttpClient 4.4

    public static CloseableHttpClient acceptsUntrustedCertsHttpClient() throws KeyStoreException, NoSuch ...

  6. 【BZOJ】1485: [HNOI2009]有趣的数列

    [算法]Catalan数 [题解] 学了卡特兰数就会啦>_<! 因为奇偶各自递增,所以确定了奇偶各自的数字后排列唯一. 那么就是给2n个数分奇偶了,是不是有点像入栈出栈序呢. 将做偶数标为 ...

  7. 【CodeForces】947 D. Picking Strings

    [题目]D. Picking Strings [题意]给定只含'A','B','C'的字符串,支持以下变换:1.A - BC   2.B - AC   3.C - AB   4.AAA - empty ...

  8. 20155117王震宇 2006-2007-2 《Java程序设计》第5周学习总结

    教材学习内容总结 try & catch java中的错误会被打包成对象,可以尝试(try)捕捉(catch)代表错误的对象后做一些处理.如果发生错误,会跳到catch的区块并执行. 异常结构 ...

  9. NYOJ 739 笨蛋难题四 (数学)

    题目链接 描述 这些日子笨蛋一直研究股票,经过调研,终于发现xxx公司股票规律,更可喜的是 笨蛋推算出这家公司每天的股价,为了防止别人发现他的秘密.他决定对于这家公司的 股票最多买一次,现在笨蛋已经将 ...

  10. 简易版jquery

    最近写了一个简易版的jquery   github地址:https://github.com/jiangzhenfei/Easy-Jquery 完成的方法: 1.$('#id') 2.extend扩展 ...