/*
10 10
#.######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#....#
0 1
9 8
*/
#define _CRT_SECURE_NO_WARNINGS
/*
10 10
#.######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#....#
0 1
9 8
*/
#include <iostream>
#include <utility>
#include <queue>
using namespace std; const int INF = ;
const int MAX_N = , MAX_M = ; typedef pair<int, int> P;
//输入
char maze[MAX_N][MAX_M];
int N, M;
int sx, sy;
int gx, gy;
//到各个位置最短距离的数组
int d[MAX_N][MAX_M]; //4个方向移动的向量--下,右,上,左
int dx[] = { , , -, }, dy[] = { , , , - }; //从(sx, sy) 到 (gx, gy)的最短距离
int bfs()
{
queue<P> que;
for (int i = ; i < N; i++) //未走过的都为INF
for (int j = ; j < M; j++) d[i][j] = INF;
//将起点加入队列, 并把这一地点的距离设置为0
que.push(P(sx, sy));
d[sx][sy] = ; //不断循环直到队列为空,长度为0
while (que.size()) {
//出队
P p = que.front(); que.pop();
//如果取出的状态已经是终点,则结束搜索
if (p.first == gx && p.second == gy) break; //四个方向的循环
for (int i = ; i < ; i++) {
//移动之后的位置为 (nx, ny)
int nx = p.first + dx[i], ny = p.second + dy[i]; //当前位置+方向 //判断是否可以移动以及是否已经访问过 (d[nx][ny] != INF 则已经访问过)
if ( <= nx && nx < N && <= ny && ny < M && maze[nx][ny] != '#' && d[nx][ny] == INF) {
que.push(P(nx, ny)); //将没有走过的路,入队
//可以移动的话,则加入到队列,并且到该位置的距离确定为到p的距离+1
d[nx][ny] = d[p.first][p.second] + ;
}
}
}
return d[gx][gy];
} void solve()
{
int res = bfs();
printf("%d\n", res);
} void Input()
{
cout << "设置Maze大小: \n";
cin >> N >> M;
cout << "设置迷宫(通路为 '.', 墙为'#'):\n";
for (int i = ; i < N; i++) {
for (int j = ; j < M; j++)
cin >> maze[i][j];
}
cout << "设置入口: (sx, sy): ";
cin >> sx >> sy;
cout << "设置出口: (gx, gy): ";
cin >> gx >> gy;
} int main(int argc, char const *argv[])
{
Input();
solve();
return ;
}

BFS_Maze_求解迷宫最短路径的更多相关文章

  1. Java求解迷宫问题:栈与回溯算法

    摘要: 使用栈的数据结构及相应的回溯算法实现迷宫创建及求解,带点JavaGUI 的基础知识. 难度: 中级 迷宫问题是栈的典型应用,栈通常也与回溯算法连用. 回溯算法的基本描述是: (1)  选择一个 ...

  2. BFS求解迷宫的最短路径问题

    题目:给定一个大小为N*M的迷宫,迷宫由通道('.')和墙壁('#')组成,其中通道S表示起点,通道G表示终点,每一步移动可以达到上下左右中不是墙壁的位置.试求出起点到终点的最小步数.(本题假定迷宫是 ...

  3. 迷宫最短路径问题的dfs,bfs实现

    迷宫的最短路径 给定一个大小为 N×M的迷宫.迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动.请求出从起点到终点所需的小步数.请注意,本题假定从起点一定可以移动到终点 限制条件:N,M ...

  4. 【数据结构】10分钟教你用栈求解迷宫老鼠问题超详细教程附C++源代码

    问题描述 给定一张迷宫地图和一个迷宫入口,然后进入迷宫探索找到一个出口.如下图所示: 该图是一个矩形区域,有一个入口和出口.迷宫内部包含不能穿越的墙壁或者障碍物.这些障碍物沿着行和列放置,与迷宫的边界 ...

  5. 深度优先搜索(DFS)和广度优先搜索(BFS)求解迷宫问题

    用下面这个简单的迷宫图作为例子: OXXXXXXX OOOOOXXX XOXXOOOX XOXXOXXO XOXXXXXX XOXXOOOX XOOOOXOO XXXXXXXO O为通路,X为障碍物. ...

  6. 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)

    [题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...

  7. cdoj1088-王之迷宫 (三维迷宫最短路径)【BFS】

    http://acm.uestc.edu.cn/#/problem/show/1088 王之迷宫 Time Limit: 3000/1000MS (Java/Others)     Memory Li ...

  8. zoj1649-Rescue (迷宫最短路径)【bfs 优先队列】

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=649 Rescue Time Limit: 2 Seconds      Mem ...

  9. 个人项目Individual Project:迷宫求解

    源码的github链接:           https://github.com/zhangxue520/test 1.1问题描述: a.问题描述:以一个m * n的长方阵表示迷宫,0和1分别表示迷 ...

随机推荐

  1. SHELL编写NGINX服务控制脚本

    使用源码包安装的Nginx没办法使用"service nginx start"或"/etc/init.d/nginx start"进行操作和控制,所以写了以下的 ...

  2. Delphi 获取时间的年月日

    procedure TFrmLltj.FormActivate(Sender: TObject); var   Present: TDateTime;   Year, Month, Day, Hour ...

  3. R语言获取数据类型信息的一些有用函数

    向量.因子.时间序列x[i]:  矩阵.数据框x[i, j] x[i, ] x[, j]:  数组就是根据维度多打几个逗号而已x[i, j, k, -]:  列表要用双重中括号x[[i]].  特殊的 ...

  4. excel批处理_判断一个名称是不是药品

    把药品名称导入到sheet1的A字段 # -*- coding: utf-8 -*-"""Created on Fri Dec  9 09:38:58 2016判断一个名 ...

  5. ADO.NET--收藏整理别人的教程

    本文所有内容均从前辈的博客中收集整理而来,仅供自己学习参考的时候快速访问用. ADO.NET入门教程(一) 初识ADO.NET ADO.NET入门教程(二)了解.NET数据提供程序 ADO.NET入门 ...

  6. p/invoke 碎片-- 对字符串的处理

    字符串在内存中的的几种风格 字符串作为参数和返回值 参考 字符串在内存中的几种风格 所谓的风格,也就是字符串在内存中的存在形式.如何存放的,占据内存的大小,还有存放顺序等.在不同的编程语言和不同的平台 ...

  7. MVC重定向-自定义路由篇

    public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.Ignore ...

  8. 苹果iphone手机上input的button按钮颜色显示有问题,安卓却没问题

    苹果手机中会如类似上图,安卓却可以按自己写的来显示 解决办法: -webkit-appearance: none; 以上即可,当然样式中可以加上通用的: 通用:input[type=button], ...

  9. 【04-10】java中的路径

    java中的路径 System.getProperty("user.dir")  获取工程的绝对路径 Class.class.getClass().getResource(&quo ...

  10. Solved: “Cannot execute a program. The command being executed was \roslyn\csc.exe”

    When you publish your ASP.NET project to a hosting account such as GoDaddy, you may run into the iss ...