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->电子老鼠走迷宫的更多相关文章

  1. noj电子老鼠走迷宫(深搜dfs)超时错误

    1042.电子老鼠闯迷宫 时限:1000ms 内存限制:10000K  总时限:3000ms 描述 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色 ...

  2. 【SSL1455&1456】 电子老鼠闯迷宫 & 骑士游行

    考点概况: 广搜板子 题面: \[\Large\text{电子老鼠闯迷宫}\] \[Time~Limit:1000MS~~Memory~Limit:65536K\] Description 如下图12 ...

  3. [BFS]电子老鼠闯迷宫

    电子老鼠闯迷宫 Description 如下图12×12方格图,找出一条自入口(2,9)到出口(11,8)的最短路径. Input Output Sample Input 12 //迷宫大小 2 9 ...

  4. 老鼠走迷宫II

    转自:http://blog.csdn.net/holymaple/article/details/8636234 由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不止一条,如何求出所有的路径呢? 解法 ...

  5. 老鼠走迷宫I

    转自:http://blog.csdn.net/holymaple/article/details/8582517 说明:老鼠走迷宫是递回求解的基本提醒,我们在二维阵列中使用2来表示迷宫墙壁,使用1来 ...

  6. Java与算法之(5) - 老鼠走迷宫(深度优先算法)

    小老鼠走进了格子迷宫,如何能绕过猫并以最短的路线吃到奶酪呢? 注意只能上下左右移动,不能斜着移动. 在解决迷宫问题上,深度优先算法的思路是沿着一条路一直走,遇到障碍或走出边界再返回尝试别的路径. 首先 ...

  7. 老鼠走迷宫(2)输出所有路径(C语言)

    需求 有一个迷宫,在迷宫的某个出口放着一块奶酪.将一只老鼠由某个入口处放进去,它必须穿过迷宫,找到奶酪.请找出它的行走路径. STEP 1 题目转化 我们用一个二维数组来表示迷宫,用2表示迷宫的墙壁, ...

  8. 老鼠走迷宫(1)输出唯一路径(C语言)

    需求 有一个迷宫,在迷宫的某个出口放着一块奶酪.将一只老鼠由某个入口处放进去,它必须穿过迷宫,找到奶酪.请找出它的行走路径. STEP 1 题目转化 我们用一个二维数组来表示迷宫,用2表示迷宫的墙壁, ...

  9. C语言动态走迷宫

    曾经用C语言做过的动态走迷宫程序,先分享代码如下: 代码如下: //头文件 #include<stdio.h> #include<windows.h>//Sleep(500)函 ...

随机推荐

  1. vue引用 element-ui 的 el-aside -> el-menu -> el-menu-item 路由侧边栏跳转链接,接上动态路由

    npm 下载 npm i element-ui -S Vue main.js //引入element-ui的包 import ElementUI from 'element-ui';   //引入el ...

  2. HCNP Routing&Switching之OSPF LSA更新规则和路由汇总

    前文我们了解了OSPF外部路由类型以及forwarding address字段的作用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15225673.html: ...

  3. Robot Framework(14)- Variables 表的详细使用和具体例子

    如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html Variable ...

  4. Xilinx约束学习笔记(三)—— 时序概念

    3. 时序概念 发现对于时序基础的介绍这一块,Intel 的文档竟然要比 Xilinx 的详细,因此引用了很多 Intel 的文档内容. 3.1 术语 发送沿(launch edge),指用来发送数据 ...

  5. "指针"和"引用"大对比

    相同点: 都能够直接引用对象,并对对象进行操作. 不同点: 指针 引用 指针类型的变量能够保存一个对象的地址 引用是一个对象的别名 可以为空nil,可以不初始化 不可以为空nil,必须初始化 当设计一 ...

  6. Windows安装Docker & Docker-Compose & 配置docker私有仓库

    一定要给windows先创建软连接,不然系统盘会爆表的: mklink /j .docker D:\Administrator\.docker Win7安装Docker Dockerfile # FR ...

  7. Prometheus 2.21.0 新特性

    Prometheus 2.21.0 现在(2020.09.11)已经发布,在上个月的 2.20.0 之后又进行了很多的修复和改进. 这个版本使用了 Go 1.15 进行编译,不赞成在TLS证书验证中使 ...

  8. CodeForces - 706B Interesting drink(二分查找)

    Interesting drink Problem Vasiliy likes to rest after a hard work, so you may often meet him in some ...

  9. mysql给数据库表里某个字段赋随机值

    UPDATE sxz_goods set sales_volume_base = round(rand() * 50) + 1 where sales_volume_base =0 ORDER BY ...

  10. 3gcms-Flash幻灯片上传后图片模糊解决办法

    很简单,不用纠结,直接修改admin/lib/action/FileAction.class.php 将 $upload->thumbMaxWidth='300'; //以字串格式来传,如果你希 ...