常见迷宫:

输入迷宫 启点 终点 然后求最短路径 BFS例题

用dist[][]数组来记录 启点到每个点的最短路径

 #include <iostream>
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std; const int maxsize = ;
const int INF = 0xfff3;
int m,n;
int d[][] = { {-, , , }, {, , , -} };
int dist[maxsize][maxsize];//书上方法 : 用dist[m][n]将最短路径储存起来 初始为INF表示无法到达
struct Pos
{
int x,y;
}st,ed;
char maze[maxsize][maxsize]; bool check(int x, int y)
{
if(x < || x >= m || y < || y >= n) return false;
if(maze[x][y] == '#' || dist[x][y] != INF) return false;//!=INF表示可达就已经走到过
return true;
}
int bfs()
{
for (int i = ; i < m; i++)
for (int j = ;j < n; j++)
dist[i][j] = INF;
queue<struct Pos> que;
que.push(st);
dist[st.x][st.y] = ;//自己到自己为0
while (!que.empty())
{
int nx, ny;
Pos node = que.front();
que.pop();
//ans ++;//这里出错 并不是 每次出队都是最短路径中的结点 调试可以发现
if(node.x == ed.x && node.y == ed.y) return dist[ed.x][ed.y];
for (int i = ; i < ; i++)
{
nx = node.x + d[][i];
ny = node.y + d[][i];
if (check(nx, ny))
{
Pos temp;
temp.x = nx;
temp.y = ny;//这里用pair更好 方便
dist[nx][ny] = dist[node.x][node.y] + ;
que.push(temp);
}
}
}
return -;
} int main()
{
ifstream cin("in.txt");
freopen("in.txt", "r", stdin);
scanf("%d%d", &m, &n);
getchar();
for (int i = ;i < m; i++)
{
gets(maze[i]);
}
for (int i = ; i < m; i++)
{
for (int j = ; j < n; j++)
{
if (maze[i][j] == 'S')
{
st.x = i;
st.y = j;
}
if (maze[i][j] == 'G')
{
ed.x = i;
ed.y = j;
}
}
}
int ans = bfs();
if (ans == -) cout << "no way" << endl;
else cout << ans << endl;
}
//对fill 和 memset 还需了解 是在不行就循环填充
//用dist记录最短路径 而不是每一次出队ans++
//时间复杂度 状态转移是四个方向 每个格至多访问一次 O(4*m*n)

BFS简单迷宫的更多相关文章

  1. BFS简单题套路_Codevs 1215 迷宫

    BFS 简单题套路 1. 遇到迷宫之类的简单题,有什么行走方向的,先写下面的 声明 ; struct Status { int r, c; Status(, ) : r(r), c(c) {} // ...

  2. 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)

    深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...

  3. 深度优先搜索DFS和广度优先搜索BFS简单解析

    转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...

  4. BFS实现迷宫问题

    BFS实现迷宫问题 问题描述,要求从起点走到终点,找出最短的距离,要避开障碍 输入描述,输入一个二维数组表示地图,其中等于10就是终点,等于-10就是起点,等于1就是障碍,等于0就是可以走的 代码: ...

  5. bfs简单题-poj2251

    宽搜基础题 思路很简单,注意细节. 走过的节点一定要打上标记//tag数组 三维字符串输入一定要注意 #include <stdio.h> #include <iostream> ...

  6. 暑假集训(1)第八弹 -----简单迷宫(Poj3984)

    Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, ...

  7. ACM:图BFS,迷宫

    称号: 网络格迷宫n行m单位列格组成,每个单元格无论空间(使用1表示),无论是障碍(使用0为了表示).你的任务是找到一个动作序列最短的从开始到结束,其中UDLR同比分别增长.下一个.左.向右移动到下一 ...

  8. 广度优先搜索(BFS)——迷宫的最短路径

    宽度优先搜索按照距开始状态由近到远的顺序进行搜索,因此可以很容易的用来求最短路径,最少操作之类问题的答案. 宽度优先搜索介绍(一篇不错的文章). 题目描述: 给定一个大小为N*M的迷宫.迷宫有通道和墙 ...

  9. 【bfs】迷宫问题

    [题目描述] 定义一个二维数组: 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. HBuilder的默认工作空间的修改

    HBuilder的默认工作空间的修改并不像其他ide一样,在设置里进行更改,而是在工具中进行设置. 1.单击菜单栏“工具”,选择“变更默认代码存放目录” 2.进行修改即可.

  2. 持有对方的引用&&内部类

    现在来做个很简单的东西,就是做一个做加法的图形界面 然后现在先是一个不用持有对方引用的写法: import java.awt.*; import java.awt.event.*; public cl ...

  3. snort + barnyard2如何正确读取snort.unified2格式的数据集并且入库MySQL(图文详解)

    不多说,直接上干货! 为什么,要写这篇论文? 是因为,目前科研的我,正值研三,致力于网络安全.大数据.机器学习研究领域! 论文方向的需要,同时不局限于真实物理环境机器实验室的攻防环境.也不局限于真实物 ...

  4. 基于CentOS6.5下Suricata(一款高性能的网络IDS、IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐)

    不多说,直接上干货! 为什么,要写这篇论文? 是因为,目前科研的我,正值研三,致力于网络安全.大数据.机器学习研究领域! 论文方向的需要,同时不局限于真实物理环境机器实验室的攻防环境.也不局限于真实物 ...

  5. 在spring data jpa中使用自定义转换器之使用枚举转换

    转载请注明http://www.cnblogs.com/majianming/p/8553217.html 在项目中,经常会出现这样的情况,一个实体的字段名是枚举类型的 我们在把它存放到数据库中是需要 ...

  6. 外文翻译 《How we decide》赛场上的四分卫 第三节

    本书导言翻译 本章第二节 1982年,一位名叫Elliot的病人走进了神经科学家Antonio Damasio的办公室.几个月之前,一个小的肿瘤在它的大脑中被切除,切除点与大脑额叶非常靠近.在手术之前 ...

  7. Java数组的交集、并集

    // 求两个数组的交集 public static int[] SameOfTwoArrays(int[] arr1, int[] arr2) { // 新建一个空数组,用于存储交集,空数组长度应该为 ...

  8. CentOS7搭建LAMP

    阿里云CentOS7.3搭建 Apache+MySQL+PHP环境 参考https://www.cnblogs.com/apro-abra/p/4862285.html   一.安装Apache 1. ...

  9. 最新版Kubernetes常用命令大全

    #查看所有namespace的pods运行情况 kubectl get pods --all-namespaces #查看具体pods,记得后边跟namespace名字哦 kubectl get po ...

  10. 使用VirtualBox的时候虚拟机无法ping通windows主机,但是主机可以ping通虚拟机

    问题原因是windows开启了防火墙导致的,将windows的防火墙关闭即可. 关闭windows防火墙后会有警告的信息出现,直接无视即可.