题目大意:输入三个整数n,m,k,分别表示在接下来有一个n行m列的地图。一个机器人从第一行的第k列进入。问机器人经过多少步才能出来。如果出现了循环

则输出循环的步数

解题思路:DFS

代码如下(有详细的解释):

/*
* 1035_1.cpp
*
* Created on: 2013年8月17日
* Author: Administrator
*/
/*简单搜索题,看注释:
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std; /**
* map[][] :用来标记地图
* num[x][y] : 用来标记走到(x,y)这个点的时候用了多少步.
* 如果num[x][y] == 0,则证明这一步还没走过。否则,根据题意则可能出现了循环
*
* n: 行数
* m: 列数
* k: 从第一行的第k列进入地图
* t: 总共走了多少步
* lop: 循环的步数
*/
char map[11][11];
int num[11][11];
int n, m, k, lop, t; /**
* 判断是否越界
*/
bool Overmap(int x, int y) {
if (x < 1 || x > n || y < 1 || y > m) {
return true;
} else {
return false;
}
} void Dfs(int x, int y) {
//如果越界了或者是出现了循环
if (Overmap(x, y) || lop > 0) {
if (lop > 0) {
printf("%d step(s) before a loop of %d step(s)\n", t - lop, lop);
} else {
printf("%d step(s) to exit\n", t);
}
return ;
} if (num[x][y] == 0) {//如果这一步还没有走过
num[x][y] = ++t;
} else {//判断是否有循环(如果这一步已经走过,则计算循环的步数)
lop = t - num[x][y] + 1;
}//else //遍历状态
switch(map[x][y]) {
case 'N': x--; Dfs(x, y); x++; break; //Dfs最主要:前加的条件,在之后要返回
case 'E': y++; Dfs(x, y); y--; break;
case 'S': x++; Dfs(x, y); x--; break;
case 'W': y--; Dfs(x, y); y++; break;
}//switch
}//dfs int main() {
while (scanf("%d %d %d", &n, &m, &k) != EOF, n) {
memset(map, 0, sizeof(map));
memset(num, 0, sizeof(num)); lop = 0;
t = 0;
getchar();
for (int i = 1; i <= n; i++) {
scanf("%s", map[i] + 1);
getchar();
}
Dfs(1, k); }
}

(step 4.3.5)hdu 1035(Robot Motion——DFS)的更多相关文章

  1. HDOJ(HDU).1035 Robot Motion (DFS)

    HDOJ(HDU).1035 Robot Motion [从零开始DFS(4)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DF ...

  2. hdu 1035 Robot Motion(dfs)

    虽然做出来了,还是很失望的!!! 加油!!!还是慢慢来吧!!! >>>>>>>>>>>>>>>>> ...

  3. [ACM] hdu 1035 Robot Motion (模拟或DFS)

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

  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. 题解报告:hdu 1035 Robot Motion(简单搜索一遍)

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

  7. hdoj 1035 Robot Motion

    Robot Motion Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  8. hdu1035 Robot Motion (DFS)

    Robot Motion Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  9. HDOJ(HDU).1045 Fire Net (DFS)

    HDOJ(HDU).1045 Fire Net [从零开始DFS(7)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HD ...

随机推荐

  1. linux xxd 命令

    http://www.cnblogs.com/openix/archive/2012/04/23/2466320.html xxd -i dht.jpg dht.h

  2. IIS7 发布mvc3.0

    Windows7系统和我们见面已经有一段时间了,在我们经过一段时间熟悉了她的新鲜好玩儿的功能之后,也许我们该静下心来想一下怎么用她做一些与学习有 关的事情,从Windows7的第一个试用版到现在的零售 ...

  3. 从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构) (转)

    转自:http://blog.csdn.net/v_july_v/article/details/6704077 从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到 ...

  4. C语言中的位拷贝与值拷贝浅谈(转载)

    注:C语言实现的PHP变量的赋值过程中,就涉及到了 深拷贝和浅拷贝 位拷贝拷贝的是地址(也叫浅拷贝),而值拷贝则拷贝的是内容(深拷贝).深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象 ...

  5. poj3378

    统计长度为5的上升序列个数, 容易想到O(n^2)的dp f[k,i]:=Σf[k-1,j] (1<=j<i,a[i]>a[j]) ans:=Σf[5,i] 但是显然会超时,需要考虑 ...

  6. JqueryEasyUI 增加选项卡

    function addTab(subtitle,url){ if(!$('#tabs').tabs('exists',subtitle)){ $('#tabs').tabs('add',{ titl ...

  7. SQL RIGHT JOIN 关键字

    SQL RIGHT JOIN 关键字 RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行. RIGHT JOIN ...

  8. FirstOrDefault

    FirstOrDefault:取序列中满足条件的第一个元素,如果没有元素满足条件,则返回默认值(对于可以为null的对象,默认值为null,对于不能为null的对象,如int,默认值为0)

  9. ubuntuy用户切换和密码修改

    修改当前用户的密码 $passwd 修改用户密码 $sudo passwd 用户名 切换到其他帐号(需要该用户的密码) $su 用户名 切换到root帐号 $sudo -s

  10. [转]javascript console 函数详解 js开发调试的利器

    javascript console 函数详解 js开发调试的利器   分步阅读 Console 是用于显示 JS和 DOM 对象信息的单独窗口.并且向 JS 中注入1个 console 对象,使用该 ...