BFS简单迷宫
常见迷宫:
输入迷宫 启点 终点 然后求最短路径 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简单迷宫的更多相关文章
- BFS简单题套路_Codevs 1215 迷宫
BFS 简单题套路 1. 遇到迷宫之类的简单题,有什么行走方向的,先写下面的 声明 ; struct Status { int r, c; Status(, ) : r(r), c(c) {} // ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析
转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...
- BFS实现迷宫问题
BFS实现迷宫问题 问题描述,要求从起点走到终点,找出最短的距离,要避开障碍 输入描述,输入一个二维数组表示地图,其中等于10就是终点,等于-10就是起点,等于1就是障碍,等于0就是可以走的 代码: ...
- bfs简单题-poj2251
宽搜基础题 思路很简单,注意细节. 走过的节点一定要打上标记//tag数组 三维字符串输入一定要注意 #include <stdio.h> #include <iostream> ...
- 暑假集训(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, ...
- ACM:图BFS,迷宫
称号: 网络格迷宫n行m单位列格组成,每个单元格无论空间(使用1表示),无论是障碍(使用0为了表示).你的任务是找到一个动作序列最短的从开始到结束,其中UDLR同比分别增长.下一个.左.向右移动到下一 ...
- 广度优先搜索(BFS)——迷宫的最短路径
宽度优先搜索按照距开始状态由近到远的顺序进行搜索,因此可以很容易的用来求最短路径,最少操作之类问题的答案. 宽度优先搜索介绍(一篇不错的文章). 题目描述: 给定一个大小为N*M的迷宫.迷宫有通道和墙 ...
- 【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, }; 它表示一个迷 ...
随机推荐
- c#.net 正则匹配以特定字符串开头,以特定字符串结尾
string[] unit = Getunit(result40, "(?<=(开始字符串))[.\\s\\S]*?(?=(结束字符串))"); private string ...
- iOS 画环形图
由于新项目的的需求,需要画环形图,由于以前都没接触过这一类(我是菜鸟),去cocochina山找到了一个案例,个人觉得还可以,分享一下 github 地址https://github.com/zhou ...
- hihocoder offer收割编程练习赛12 A 歌德巴赫猜想
思路: 枚举. 实现: #include <iostream> #include <cstdio> #include <algorithm> using names ...
- js跨域请求的5中解决方式
跨域请求数据解决方案主要有如下解决方法: ? 1 2 3 4 5 JSONP方式 表单POST方式 服务器代理 Html5的XDomainRequest Flash request 分开说明: 一.J ...
- Android GetTimeAgo(时间戳转换几天前,几分钟前,刚刚等)
package com.studychen.seenews.util; import android.content.Context; /** * Created by tomchen on 2/26 ...
- php查询快递信息
$code = 'shunfeng'; $invoice = '952255884068'; $test = getExpressDelivery($code,$invoice); function ...
- 玩转CPU运行曲线
Leaf 是不是从来没有想过看看cpu运行曲线啊骚年?顶多也就仅仅是看看cpu利用率,吓自己一跳后感觉关闭几个不该打开的程序~ 然而问题来了,微软公司要让你绘制cpu运行曲线啊!!不仅是固定的直线,还 ...
- laravel UserRequest $request error
laravel UserRequest $request error Ask Question 0 laravel5.2,I create a UserRequest.php under Re ...
- css 最高权重 !important;
border-top: 1px solid #ccc !important;
- 09CSS高级定位
CSS高级定位 定位方式——position position:static|absolute|relative static表示为静态定位,是默认设置. absolute表示绝对定位,与下位置属 ...