题意:

有一张由0、1数字组成的5 × 5的二维数组表示的地图,寻找出口到入口的最短路径。地图显示,0表示可以走,1表示不可以走,左上角是入口,右下角是出口。

样例输入:

样例输出:

思路:

把地图抽象成一个平面直角坐标系,每一个0或1代表一个点,寻找两个点之间的最短路径可用bfs方法,并且走到一个点要记录其前序的点。最后从终点根据其前序点回溯至起点,然后从起点输出至终点。

总结:

bfs是解决两点之间最短路径的好方法,但是需要开一个二维数组来记录前序点,如果二维数组比较大的话其实很浪费。

判断一个点是否已经走过也可以用map,把这个点和他的前序点插入map,最后输出路径的时候在map中find(),然后输出。

代码:

#include<iostream>
#include <queue>
using namespace std;
struct point
{int x;int y;point(){}point(int ix, int iy){x = ix;y = iy;}
};
int main()
{int dx[] = { 0,0,1,-1 };int dy[] = { 1,-1,0,0 };bool reach[5][5];int matrix[5][5];for (int i = 0; i < 5; i++)//读入二维数组for (int j = 0; j < 5; j++)cin >> matrix[i][j];point before[5][5];for (int i = 0; i < 5; i++)//前序点置空for (int j = 0; j < 5; j++){before[i][j].x = -1;before[i][j].y = -1;}queue<point> way;//bfs方法way.push(point(0, 0));while (!way.empty()){point now = way.front();way.pop();if (now.x == 4 && now.y == 4)//特判终点break;for (int i = 0; i < 4; i++){int x = now.x + dx[i];int y = now.y + dy[i];if (x >= 0 && x <= 4 && y >= 0 && y <= 4 && matrix[x][y] == 0 && before[x][y].x == -1){before[x][y].x = now.x;//记录前序点before[x][y].y = now.y;way.push(point(x, y));}}}point path[25];int m = 0;point target(4, 4);while (target.x != 0 || target.y != 0)//从终点回溯到起点{path[m].x = target.x;path[m].y = target.y;m++;target = before[target.x][target.y];}path[m].x = 0;//把起点加入路径path[m].y = 0;for (int i = m; i >= 0; i--)//从起点开始输出路径cout << "(" << path[i].x << ", " << path[i].y << ")" << endl;
}

【A - Maze】迷宫问题相关推荐

  1. PHP:Maze迷宫寻址算法(附完整源码)

    PHP:Maze迷宫寻址算法 <?php//迷宫一 for ($l = 0; $l <= 5; $l++) {for ($m = 0

  2. 高财商的Maze迷宫勒索病毒组织,才出道一年就赚的盆满钵满

    最近,藏身Maze迷宫勒索病毒背后的黑客朋友们很忙. 刚袭击完美国核军事承包商后,他们又马不停蹄的对韩国LG集团下手了. Maze迷宫勒索软件运营者(后文简称Maze组织)声称他们破坏并锁定了韩国跨国 ...

  3. 华为机试---Word Maze迷宫游戏

    import java.util.Scanner; public class Main{ private static boolean isFind = false;//全局变量,保存是否找到食物单词 ...

  4. 用栈、回溯算法设计迷宫程序

    目录 1.走迷宫与回溯算法 2.迷宫设计栈扮演的角色 3.Python实现走迷宫 栈的应用有许多,本篇博文着重将栈与回溯(Backtracking)算法结合,设计走迷宫程序.其实回溯算法也是人工智能的 ...

  5. 数据结构之迷宫问题求解(一)利用栈与递归求解出口

    本文适合于对迷宫问题已有初步研究,或阅读代码能力较强的人. 因此,如果你对迷宫问题一无所知,请参考其他更详细的资料. 迷宫问题,是一个对栈(Stack)典型应用的例子之一. 假如,有如下10X10的迷 ...

  6. C语言 迷宫问题求解(顺序栈应用示例)

    [cpp] view plaincopy //顺序栈的应用:迷宫 //作者:nuaazdh //时间:2011年12月7日 #include <stdio.h> #include < ...

  7. Java迷宫代码,深度优先遍历

    此次迷宫深度优先遍历寻找路径采用栈结构,每个节点都有固定的行走方向(右下左上),除非一个方向走不通,不然会一条道走到黑. 如果路径存在,打印出行走路径,否则打印出迷宫不存在有效路径. 方向常量定义: ...

  8. java 回溯_java 实现迷宫回溯算法示例详解

    用一个7 x 7的矩形表示迷宫,0和1分别表示的是通路和障碍.通过设计编写程序找到蓝色小球达到蓝色旗子的路线 思路: 构建一个迷宫(用二维数组)实现找通路的方法findRoad() 构建二维数组不难, ...

  9. Java B组蓝桥杯第十届国赛:大胖子走迷宫

    试题 H: 大胖子走迷宫 时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分 [问题描述] 小明是个大胖子,或者说是个大大胖子,如果说正常人占用 1 × 1 的面积, 小明要占用 5 ...

  10. java 迷宫代码_老鼠走迷宫代码 JAVA

    展开全部 //老鼠走迷宫程序 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Maze1 ...

最新文章

  1. 如何将当前更改提交到git中的不同分支[重复]
  2. opencv中vc14和vc15的区别?
  3. flask request (request.files)
  4. Navicat工具里的empty table和truncate table的区别
  5. makefile内容小结
  6. 新乡医学院2018计算机考试题,新乡医学院继教2018级局部解剖学复习自测下肢答案...
  7. 遇到:ORA-27121: UNABLE TO DETERMINE SIZE OF SHAR...
  8. mysql jsp servlet 中文乱码问题。
  9. spring boot 处理自定义注解
  10. Silverlight Xap和Html Asp.net参数传递
  11. 单体内置对象_第五章 单体内置对象
  12. 金蝶K3WISE无窗口登录
  13. PayPal完成对区块链公司的投资首秀
  14. 由WMT机器翻译双向夺冠看搜狗语音交互布局
  15. 编译原理:什么是编译程序?
  16. 金融行业市场策划案例(共12份)
  17. MySQL 数据库基础
  18. Partial-ReID
  19. 1元秒杀,1小时145人购买,高达1分钟2人+购买,有人错过了,要求追加1元秒杀...
  20. R语言 词云图过大不能全部显示怎么办

热门文章

  1. 多租户Saas架构设计分析(基础篇)
  2. 【UML】-- 期末试题题库含答案(各章题目、选择题、填空题、简答题、画图题)
  3. Cadence OrCAD Capture复用参考设计时保持参考设计编号不变的情况下自动编号的方法
  4. liunx学习日记(一)---Linux系统的安装
  5. 实践 - 使用Python画一棵递归分形树
  6. 微软的员工们,现在可以永久在家办公了
  7. plsql如何远程连接oracle数据库连接,使用PLSQL 远程连接oracle数据库
  8. java冒泡排序获取最大值_Java干货分享:冒泡排序
  9. linux中shutdown命令,linux下shutdown命令有什么作用 shutdown命令使用方法
  10. Thread 类及常用的方法