(step 4.3.5)hdu 1035(Robot Motion——DFS)
题目大意:输入三个整数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)的更多相关文章
- HDOJ(HDU).1035 Robot Motion (DFS)
HDOJ(HDU).1035 Robot Motion [从零开始DFS(4)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DF ...
- hdu 1035 Robot Motion(dfs)
虽然做出来了,还是很失望的!!! 加油!!!还是慢慢来吧!!! >>>>>>>>>>>>>>>>> ...
- [ACM] hdu 1035 Robot Motion (模拟或DFS)
Robot Motion Problem Description A robot has been programmed to follow the instructions in its path. ...
- HDU 1035 Robot Motion(dfs + 模拟)
嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1035 这道题比较简单,但自己一直被卡,原因就是在读入mp这张字符图的时候用了scanf被卡. ...
- hdu 1035 Robot Motion(模拟)
Problem Description A robot has been programmed to follow the instructions in its path. Instructions ...
- 题解报告:hdu 1035 Robot Motion(简单搜索一遍)
Problem Description A robot has been programmed to follow the instructions in its path. Instructions ...
- hdoj 1035 Robot Motion
Robot Motion Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- hdu1035 Robot Motion (DFS)
Robot Motion Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- HDOJ(HDU).1045 Fire Net (DFS)
HDOJ(HDU).1045 Fire Net [从零开始DFS(7)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HD ...
随机推荐
- 用QT创建新风格: QStyle
转贴: http://hi.baidu.com/yjj2008/blog/item/6cd4a1892ef0d4b60f2444a5.html 本文介绍了如何使用qt提供的接口来设计自己的GUI风格( ...
- MyEclipse常用设置笔记
1. Myeclipse下去掉SVN用户名和密码,就只能删除Subversion的auth目录 windows平台 Win7: 1.进入c:/Users/[你的用户名]/AppData/Roaming ...
- 几种必知的oracle结构图
一.数据库结构 二.Oracle 内存结构 三.进程结构 1. 用户进程:在数据库用户请求连接到Oracle 服务器时启动 2. 服务器进程:可以连接到Oracle实例,它在用户建立会话时启动 3. ...
- MySQL数据库服务器安装标准
MySQL数据库服务器安装标准 (1).BIOS优化,阵列配置 1.1:关闭CPU节能,因为服务器品牌众多,BIOS设置不相同,主要是关闭CPU节能,如C1,DELLR730,已经智能设置,直接有个p ...
- PC寄存器的真实状态
因为预取指令的关系,PC寄存器永远比当前的寄存器多两个指令,ARM模式为大8,Thumb模式为大2,这针对的是32bit的ARMv7的指令集 In ARM state, the value of th ...
- EL表达式 JSTL中的常用EL函数 动态数据的国际化
ELppt: EL 全名为Expression Language.EL主要作用: 获取数据: •EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据.( ...
- Android 内核初识(1)下载源码需求与教程
官方文档: http://source.android.com/source/requirements.html Requirements The Android build is routinel ...
- 【HDOJ】1699 The comment in cpp
注意测试数据12/*hduacm// abcd结果是1/*hduacm// ABCD /* 1699 */ #include <iostream> #include <sstream ...
- 三个入侵的必备小工具-lcx.exe、nc.exe、sc.exe
lcx.exe的使用方法 以前抓肉鸡都是通过1433弱口令,然后.. 但是发现很多服务器开了1433,3389,但是终端是连不上的,因为服务器本身是在内网,只对外开放了1433端口,幸好有lcx. ...
- UVa 120 (构造) Stacks of Flapjacks
这题求解的过程和选择排序非常相似. 反转的过程中分为无序(在前面)和有序(在后面)两个部分,一开始视为全部为无序. 在无序部分中找到最大的元素,先把它翻到最前面,然后再反转到无序部分的最后面.这样该元 ...