#include <iostream>
#include <stack>
#include <string.h>
#include <stdio.h>
#include<queue>
#include<algorithm>
using namespace std;
int a[][]=
{
{,,,,,,,,,},{,,,,,,,,,},
{,,,,,,,,,},{,,,,,,,,,},
{,,,,,,,,,},{,,,,,,,,,},
{,,,,,,,,,},{,,,,,,,,,},
{,,,,,,,,,},{,,,,,,,,,}
};
int dir[][]={{-,},{,},{,},{,-}};
int vis[][];//用来标记有没有走过(有没有在队列中)
int b[][];//用来记录bfs的过程
struct Node
{
int x,y;
};
queue<Node>q;
int main()
{
memset(b,,sizeof(b));
memset(vis,,sizeof(vis));
while(!q.empty()) q.pop();//初始化队列 Node start;
start.x=;
start.y=;
vis[][]=;
b[][]=;
q.push(start);//把起点放进队列
bool f=;
while(!q.empty())
{
Node temp;
temp=q.front();//取出队头元素
q.pop();
int x=temp.x;
int y=temp.y;
if(x==&&y==)//若走到了
{
f=;
Node road[];//用来记录路径
//for(int i=1;i<=8;i++)//可以通过输出b数组来观察bfs的实现过程
//{
// for(int j=1;j<=8;j++)
// {
// printf("%5d",b[i][j]);
// }
// cout<<endl;
//}
//cout<<b[8][8]<<endl;
int k=;
while(!(x==&&y==))//通过b数组来找到之前是哪一个点走到x,y的
{
road[k].x=x;
road[k++].y=y;
for(int i=;i<;i++)
{
int xx=x+dir[i][];
int yy=y+dir[i][];
if(xx<||yy<||xx>||yy>) continue;//超出范围的不要
if(b[xx][yy]==b[x][y]-)
{
x=xx;//倒退回去
y=yy;
break;//一定要跳出,要把更新的x,y放到road里
}
}
}
road[k].x=;//别忘了把起点放进去
road[k].y=;
for(int i=k;i>=;i--)//输出路径
{
cout<<road[i].x<<" "<<road[i].y<<endl;
}
}
if(f==) //找到路了就不用再跑大循环了
break; for(int i=;i<;i++)//遍历四个方向
{
int xx=x+dir[i][];
int yy=y+dir[i][];
if(a[xx][yy]==&&vis[xx][yy]==)
{
vis[xx][yy]=;
Node New;
New.x=xx;
New.y=yy;
b[xx][yy]=b[x][y]+;//用来标记走到(xx,yy)是第几步
q.push(New);//放进队列
}
}
}
return ;
}

走迷宫(用队列bfs并输出走的路径)的更多相关文章

  1. Poj3984 迷宫问题 (BFS + 路径还原)

    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, ...

  2. 【bfs】1252 走迷宫

    [题目描述] 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走. 给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到).只能在水平方向或垂直方向走,不 ...

  3. HDU 2102 A计划(BFS/DFS走迷宫)

    A计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  4. SDUT-2449_数据结构实验之栈与队列十:走迷宫

    数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...

  5. 数据结构之 栈与队列--- 走迷宫(深度搜索dfs)

    走迷宫 Time Limit: 1000MS Memory limit: 65536K 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方 ...

  6. C语言之走迷宫深度和广度优先(利用堆栈和队列)

    完成以下迷宫 利用二维数组储存每一个数组里的值,若是不能走则为1,若是可行就是0,走过了就设为2. 一般是再复制一个数组,用来记录. 堆栈的思想就是将一个点的上下左右都遍历一遍,若可行进栈,跳出遍历, ...

  7. 百炼3752:走迷宫--栈实现dfs

    3752:走迷宫 总时间限制:  1000ms 内存限制:  65536kB 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走.给定一个迷宫,求从左上角走到右下角最 ...

  8. 洛谷P1238 走迷宫题解

    题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...

  9. 【ybt1252】走迷宫

    (还是蛮经典的一道bfs) 显然算法bfs [传送门] 算法基本上算是bfs的模板了,(模板详见[新知识]队列&bfs[洛谷p1996约瑟夫问题&洛谷p1451求细胞数量]) #inc ...

随机推荐

  1. LA 4636 积木艺术

    https://vjudge.net/problem/UVALive-4636 题意: 给出正视图和侧视图,判断最少要用多少个立方体. 思路: 首先正视图里出现的积木个数都是必须的,记录下每一列积木的 ...

  2. 安装 bochs-x

    sudo apt-get install bochs-x

  3. php 数值数组遍历

    <?php $cars=array("Volvo","BMW","Toyota"); $arrlength=count($cars); ...

  4. python 删除字典元素

    myDict = {,,,} print(myDict) if 'a' in myDict: del myDict['a'] print(myDict)

  5. 2018-2019-2 20165332 《网络对抗技术》Exp4 恶意代码分析

    2018-2019-2 20165332 <网络对抗技术>Exp4 恶意代码分析 原理与实践说明 1.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分 ...

  6. git 沙河游戏节点图, 自由沙盒模拟git, 各类交互git命令

    git学习练习总资源链接: https://try.github.io/ (练习已通,有document) 本沙盒游戏教学:https://learngitbranching.js.org/?demo ...

  7. torchnet package (2)

    torchnet package (2) torchnet torch7 Dataset Iterators 尽管是用for loop语句很容易处理Dataset,但有时希望以on-the-fly m ...

  8. UVA-10305 Ordering Tasks (拓扑排序)

    题目大意:给出n个点,m条关系,按关系的从小到大排序. 题目分析:拓扑排序的模板题,套模板. kahn算法: 伪代码: Kahn算法: 摘一段维基百科上关于Kahn算法的伪码描述: L← Empty ...

  9. 3.4.1 使用过滤式扩展方法(P43-44)

    对IEnumerable<T>执行标准并且同样返回IEnumerable<T>的扩展方法,可以使用yield关键字对源数据中的项应用选择标准,已生成精简的结果集. public ...

  10. springboot问题集(一)------junit内Assert.assertEquals()的含义

    1. assertEquals([String message],Object target,Object result) target与result不相等,中断测试方法,输出message asse ...