noj->电子老鼠走迷宫
00 问题
描述:
有一只电子老鼠被困在如下图所示的迷宫中。这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色部分是路。电子老鼠可以在路上向上、下、左、右行走,每一步走一个格子。现给定一个起点S和一个终点T,求出电子老鼠最少要几步从起点走到终点。 
输入:
本题包含一个测例。在测例的第一行有四个由空格分隔的整数,分别表示起点的坐标S(x.y)和终点的坐标T(x,y)。从第二行开始的12行中,每行有12个字符,描述迷宫的情况,其中'X'表示建筑物,'.'表示路.
输出:
输出一个整数,即电子老鼠走出迷宫至少需要的步数。
输入样例:
2 9 11 8
XXXXXXXXXXXX
X......X.XXX
X.X.XX.....X
X.X.XX.XXX.X
X.X.....X..X
X.XXXXXXXXXX
X...X.X....X
X.XXX...XXXX
X.....X....X
XXX.XXXX.X.X
XXXXXXX..XXX
XXXXXXXXXXXX
输出样例:
28
01 思路
01-1 类型
很明显的一个迷宫了,并且要求出电子老鼠最少要几步从起点走到终点,所以是广搜类型。
01-2 算法
第一步:设置入口出口和迷宫本体->init()函数
第二步:bfs主控函数:
队列入出循环
生成四个节点 对四个节点进行判断
如果新坐标为终点坐标,就返回路径长度
其他点:如果不是终点坐标,在迷宫内,未访问过,不是墙,就入队
入队操作:
x.push(nextx);
y.push(nexty);
used[nextx][nexty]=1;
step[nextx][nexty]=step[prex][prey]+1;完成入队出队闭环。
输出
02 代码
1 //电子老鼠闯迷宫
2 #include<iostream>
3 #include<queue>
4
5 using namespace std;
6
7 int map[13][13];//迷宫本体
8 int used[13][13]={0};//走过标记,0为未走,1为已走
9 int step[13][13]={0};//到达当前节点所走的步数
10 int inx,iny,outx,outy,prex,prey,nextx,nexty;
11 //分别是入口,出口,老位置、新位置
12 int dx[4] = {-1,1,0,0};//左右上下
13 int dy[4] = {0,0,-1,1};//左右上下
14
15 void init();
16 int bfs();
17 queue<int>x;
18 queue<int>y;
19
20 int main(){
21 init();//初始化矩阵以及队列
22 cout<<bfs()<<endl;
23 return 0;
24 }
25 void init(){
26 int i,j;
27 char temp;
28 cin >> inx >> iny >> outx >> outy;
29 //初始化这个矩阵,方便起见,从1开始
30 for(i=1;i<13;i++){
31 for(j=1;j<13;j++){
32 cin>>temp;
33 if(temp == 'X'){
34 map[i][j]=1;
35 }
36 else{
37 map[i][j]=0;
38 }
39 }
40 }
41 //起点入队
42 x.push(inx);
43 y.push(iny);
44 used[inx][iny]=1;
45 }
46 int bfs(){//
47 int i;
48 while(!x.empty()&&!y.empty()){
49 prex = x.front();
50 prey = y.front();
51 x.pop();
52 y.pop();
53 //生成当前节点的四个子节点
54 for(i=0;i<4;i++){
55 nextx = prex + dx[i];
56 nexty = prey + dy[i];
57 if(nextx==outx&&nexty==outy){
58 //如果新坐标为终点坐标
59 return(step[prex][prey]+1);
60 }
61 if(nextx>0&&nextx<=12&&nexty>0&&nexty<=12&&used[nextx][nexty]==0&&map[nextx][nexty]==0){
62 x.push(nextx);
63 y.push(nexty);
64 used[nextx][nexty]=1;
65 step[nextx][nexty]=step[prex][prey]+1;
66 }
67 }
68 }
69 return 0;
70 }
noj->电子老鼠走迷宫的更多相关文章
- noj电子老鼠走迷宫(深搜dfs)超时错误
1042.电子老鼠闯迷宫 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色 ...
- 【SSL1455&1456】 电子老鼠闯迷宫 & 骑士游行
考点概况: 广搜板子 题面: \[\Large\text{电子老鼠闯迷宫}\] \[Time~Limit:1000MS~~Memory~Limit:65536K\] Description 如下图12 ...
- [BFS]电子老鼠闯迷宫
电子老鼠闯迷宫 Description 如下图12×12方格图,找出一条自入口(2,9)到出口(11,8)的最短路径. Input Output Sample Input 12 //迷宫大小 2 9 ...
- 老鼠走迷宫II
转自:http://blog.csdn.net/holymaple/article/details/8636234 由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不止一条,如何求出所有的路径呢? 解法 ...
- 老鼠走迷宫I
转自:http://blog.csdn.net/holymaple/article/details/8582517 说明:老鼠走迷宫是递回求解的基本提醒,我们在二维阵列中使用2来表示迷宫墙壁,使用1来 ...
- Java与算法之(5) - 老鼠走迷宫(深度优先算法)
小老鼠走进了格子迷宫,如何能绕过猫并以最短的路线吃到奶酪呢? 注意只能上下左右移动,不能斜着移动. 在解决迷宫问题上,深度优先算法的思路是沿着一条路一直走,遇到障碍或走出边界再返回尝试别的路径. 首先 ...
- 老鼠走迷宫(2)输出所有路径(C语言)
需求 有一个迷宫,在迷宫的某个出口放着一块奶酪.将一只老鼠由某个入口处放进去,它必须穿过迷宫,找到奶酪.请找出它的行走路径. STEP 1 题目转化 我们用一个二维数组来表示迷宫,用2表示迷宫的墙壁, ...
- 老鼠走迷宫(1)输出唯一路径(C语言)
需求 有一个迷宫,在迷宫的某个出口放着一块奶酪.将一只老鼠由某个入口处放进去,它必须穿过迷宫,找到奶酪.请找出它的行走路径. STEP 1 题目转化 我们用一个二维数组来表示迷宫,用2表示迷宫的墙壁, ...
- C语言动态走迷宫
曾经用C语言做过的动态走迷宫程序,先分享代码如下: 代码如下: //头文件 #include<stdio.h> #include<windows.h>//Sleep(500)函 ...
随机推荐
- JUC原子操作类与乐观锁CAS
JUC原子操作类与乐观锁CAS 硬件中存在并发操作的原语,从而在硬件层面提升效率.在intel的CPU中,使用cmpxchg指令.在Java发展初期,java语言是不能够利用硬件提供的这些便利来提 ...
- Xshell破~~解和SecureCRT破~~解办法,亲测可行
解决办法很简单,那就是安装MobaXterm, 安装上即可使用,无需破击,免费,功能同样强大,不比xshell, SecureCRT功能差.它是集万千功能于一身的全能型终端神器. 听名字就不会太差,看 ...
- MobaXterm - 渗透之旅的终端神器
一.背景 1.SSH概念 如果想要连接Linux服务器来进行文件之间的传送,那就需要一个Secure Shell软件(简称SSH的)来完成.从概念上来讲,SSH其实是一个网络协议,允许通过网络连接到L ...
- 迷你DVD
public class DVD { private int ID;//id private String status;//状态 private String name;//名称 private S ...
- 苹果ASA广告投放归因的接入
前段时间,苹果终于在大陆区开放了应用商店的竞价广告.毫无疑问又开启了苹果应用导量的新玩法,各大厂商都紧跟脚步吃螃蟹.本篇讲解苹果广告中的归因部分. 苹果广告其实在海外已运行多年,而因为IDFA的政策变 ...
- 回忆之placeholder
直接看效果点这里 HTML <!DOCTYPE html> <html> <head lang="zh-CN"> <meta charse ...
- 了解PHP-FPM
在服务器上,当我们查看php进程时,全都是php-fpm进程,大家都知道这个就是php的运行环境,那么,它到底是个什么东西呢? PHP-FPM简介 PHP-FPM,就是PHP的FastCGI管理器,用 ...
- Java基础系列(17)- 顺序结构
顺序结构 JAVA的基本结构就是顺序结构,除非特别说明,否则就按照顺序一句一句执行 顺序结构是最简单的算法结构 语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的 ...
- 『Python』matplotlib常用函数
1. 绘制图表组成元素的主要函数 1.1 plot()--展现量的变化趋势 import numpy as np import matplotlib.pyplot as plt import matp ...
- VmWare装Linux&Centos步骤
昨晚一次偶然的机会进入飞哥的直播间,他正在将用虚拟机搭建Linux环境的步骤,自己之前也确实安装过一次,不过没什么系统性总结,过程中有些步骤还需百度查找.于是乎今天决定从零基础在过一遍流程,便是这篇博 ...