问题描述:

定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示:

int maze[5][5] = {

0, 1, 0, 0, 0,

0, 1, 0, 1, 0,

0, 0, 0, 0, 0,

0, 1, 1, 1, 0,

0, 0, 0, 1, 0,

};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。入口点为[0,0],既第一空格是可以走的路。

Input

一个N × M的二维数组,表示一个迷宫。数据保证有唯一解,不考虑有多解的情况,即迷宫只有一条通道。

Output

左上角到右下角的最短路径,格式如样例所示。

Sample Input

0 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

Sample Output

(0, 0)

(1, 0)

(2, 0)

(2, 1)

(2, 2)

(2, 3)

(2, 4)

(3, 4)

(4, 4)

使用广度搜素,第一个找到出口的路径一定是最短路径。

搜索过程中使用 point pre[][]数据记录上一坐标的位置,用来保存路径,这样就可以从pre[m][n]往回找寻路径,一直找到pre[0][0]。

搜索过程中可以需要改变迷宫数组mn为第三种状态,以防止重复搜索。相当于一般用法中自己定义visited数组了。

#include<iostream>
#include<queue>
#include<stack>
using namespace std;
//定义坐标
struct point
{
int x;
int y;
}; int mn[][];//记录迷宫状态:0可以访问,1不能访问,-1已经访问过
point pre[][];//记录上一个访问的坐标
point mov[]={{-,},{,-},{,},{,}}; //表示坐标的移动方向 bool bfs(int m,int n,int x,int y)
{
queue<point> zb;
point temp;
temp.x=x;
temp.y=y;
zb.push(temp);
mn[x][y]=-;
while(!zb.empty())
{
point top;
top=zb.front();
zb.pop();
for(int i=;i<;i++)
{
if(top.x+ mov[i].x==m- && top.y+mov[i].y==n-)
{
mn[top.x+ mov[i].x][top.y+mov[i].y]=-;
pre[top.x+ mov[i].x][top.y+mov[i].y]=top;
return true;
}
if(mn[top.x+ mov[i].x][top.y+mov[i].y]==)
{
mn[top.x+ mov[i].x][top.y+mov[i].y]=-;
pre[top.x+ mov[i].x][top.y+mov[i].y]=top;
point t;
t.x=top.x+ mov[i].x;
t.y=top.y+mov[i].y;
zb.push(t);
}
}
}
return false;
} int main()
{
int m,n;
cin>>m>>n;
for(int i=;i<m;i++)
{
for(int j=;j<n;j++)
{
cin>>mn[i][j];
}
}
stack<point>st;
if(bfs(m,n,,))
{
point temp;
temp.x=m-;
temp.y=n-;
while(!(temp.x== && temp.y==) )
{
st.push(temp);
temp=pre[temp.x][temp.y];
}
temp.x=;
temp.y=;
st.push(temp);
while(!st.empty())
{
cout<<'('<<st.top().x<<','<<st.top().y<<')'<<endl;
st.pop();
}
}
return ;
}

迷宫问题(bfs的应用)的更多相关文章

  1. 迷宫问题(bfs)

    import java.util.LinkedList; import java.util.Queue; import java.util.Stack; public class BFS { priv ...

  2. ZZULIOJ 1726 迷宫(BFS+小坑)

    1726: 迷宫 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 394  Solved: 64 SubmitStatusWeb Board Descr ...

  3. HDU 1728 逃离迷宫(BFS)

    Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有 ...

  4. HDU 1728:逃离迷宫(BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Problem Description   给定一个m × n (m行, n列)的迷宫,迷宫中有 ...

  5. [Swust OJ 409]--小鼠迷宫问题(BFS+记忆化搜索)

    题目链接:http://acm.swust.edu.cn/problem/409/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  6. 问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)

    题目链接:https://www.dotcpp.com/oj/problem1923.html 题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在 ...

  7. POJ 3984 - 迷宫问题 - [BFS水题]

    题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...

  8. 迷宫问题bfs, A Knight's Journey(dfs)

    迷宫问题(bfs) POJ - 3984   #include <iostream> #include <queue> #include <stack> #incl ...

  9. POJ-3984.迷宫问题(BFS + 路径输出)

    昨天中午做的这道题,结果蛙了一整天,就因为一行代码困住了,今天算是见识到自己有多菜了.流泪.jpg 本题大意:给一个5 * 5的迷宫,1表示墙壁,0表示通路,从左上角走到右下角并输出路径. 本题思路: ...

随机推荐

  1. Qt窗口部件及子部件

    QWidget类是所有用户界面对象的基类,被称为基础窗口部件. #include <QApplication> #include<QLabel> #include<QWi ...

  2. div+css布局细节问题

    cursor: pointer;在chrome里支持,hand不支持

  3. 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  4. 【POJ】【1739】Tony's Tour

    插头DP 楼教主男人八题之一! 要求从左下角走到右下角的哈密顿路径数量. 啊嘞,我只会求哈密顿回路啊……这可怎么搞…… 容易想到:要是把起点和重点直接连上就变成一条回路了……那么我们就连一下~ 我们可 ...

  5. 关于vs2010 起始页

    vs2010 起始页不显示怎么解决 工具 ---> 选项---->环境---->启动---->启动时(选项框),然后点击框尾的下拉三角按钮,点选"显示起始页" ...

  6. OWASP

    开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)是一个组织,它提供有关计算机和互联网应用程序的公正.实际.有成本效益的信息.其目的 ...

  7. spring @resource @ Autowired

    Spring中什么时候用@Resource,什么时候用@service 当你需要定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),就相当于讲这个类 ...

  8. linux网卡速率和双工模式的配置

    linux网卡速率和双工模式的配置 (2012-09-06 14:39:57) 转载▼ 标签: 科技 网络接口 协商 网卡 工具 it 分类: Linux 改变网络接口的速度和协商方式的工具miito ...

  9. hdoj 2202 最大三角形

    题目大意:给定n(3<=n<=50000)个点,求其中任意三个点组成的三角形面积最大,输出该面积. 题目传送:http://acm.hdu.edu.cn/showproblem.php?p ...

  10. JAVASCRIPT中的作用域和原型链,应该算是难点了,要好好多学学,练练

    今天初六,要上班啦... JAVASCRIPT,看来是丢不了了.. http://www.dengdeng90.com/wordpress/?p=241 http://www.cnblogs.com/ ...