走迷宫(用队列bfs并输出走的路径)


#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并输出走的路径)的更多相关文章
- 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, ...
- 【bfs】1252 走迷宫
[题目描述] 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走. 给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到).只能在水平方向或垂直方向走,不 ...
- HDU 2102 A计划(BFS/DFS走迷宫)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- SDUT-2449_数据结构实验之栈与队列十:走迷宫
数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...
- 数据结构之 栈与队列--- 走迷宫(深度搜索dfs)
走迷宫 Time Limit: 1000MS Memory limit: 65536K 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方 ...
- C语言之走迷宫深度和广度优先(利用堆栈和队列)
完成以下迷宫 利用二维数组储存每一个数组里的值,若是不能走则为1,若是可行就是0,走过了就设为2. 一般是再复制一个数组,用来记录. 堆栈的思想就是将一个点的上下左右都遍历一遍,若可行进栈,跳出遍历, ...
- 百炼3752:走迷宫--栈实现dfs
3752:走迷宫 总时间限制: 1000ms 内存限制: 65536kB 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走.给定一个迷宫,求从左上角走到右下角最 ...
- 洛谷P1238 走迷宫题解
题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...
- 【ybt1252】走迷宫
(还是蛮经典的一道bfs) 显然算法bfs [传送门] 算法基本上算是bfs的模板了,(模板详见[新知识]队列&bfs[洛谷p1996约瑟夫问题&洛谷p1451求细胞数量]) #inc ...
随机推荐
- Win10累积更新KB3081424安装失败的解决方法
我在个人的PC上多次更新KB3081424都失败了,后来按照网上给出的删除注册表残留项的方法后更新成功了(删除注册表残留项后我还执行了从微软帐户切换到本地帐户的操作,有兴趣的朋友可以试试不切换能否更新 ...
- 记一次加载js不全报错的原因总结
1.运营商广告 dns 劫持2.浏览器本身并发数3.服务器配置keepAliveTimeout=04.加载文件过大5.
- 递推-练习1--noi1760 菲波那契数列(2)
递推-练习1--noi1760 菲波那契数列(2) 一.心得 二.题目 1760:菲波那契数列(2) 总时间限制: 1000ms 内存限制: 65536kB 描述 菲波那契数列是指这样的数列: 数 ...
- 安装 android4.0 到 vmware的注意点
我发现无论如何,wmware上是出不来声音的. 我放弃 android-x86-4.3-20130725.iso 在 声音上有问题 现在安装这个版本: android-x86-4.0-RC2-eeep ...
- MOBA游戏学会这些知识,你才算真的入门了!
<英魂之刃口袋版>是一个标准的MOBA游戏,MOBA指的是多人在线战术竞技游戏,游戏模式始于1998年<星际争霸>中的一张自定义地图,经过近20年的优化和调整逐渐演变成了我们现 ...
- Rails-Treasure chest3 嵌套表单; Ransack(3900✨)用于模糊查询, ranked-model(800🌟)自订列表顺序; PaperTrail(5000✨)跟踪model's data,auditing and versioning.
自订列表顺序, gem 'ranked-model' 多步骤表单 显示资料验证错误讯息 资料筛选和搜寻, gem 'ransack' (3900✨); 软删除和版本控制 数据汇出(csv), 自订列表 ...
- 用jersey写简单Restful接口
1.在myeclipse中新建一个Dynamic Web Project 2.下载jar包,地址在这里 3.restful service代码 package com.qy; import javax ...
- Homebrew/Linuxbrew 安装常有工具
Homebrew https://brew.sh/ Install: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent ...
- Python Inotify 监视LINUX文件系统事件
Inotify 可以监视的LINUX文件系统事件包括: --IN_ACCESS,即文件被访问 --IN_MODIFY,文件被write --IN_ATTRIB,文件属性被修改,如chmod.chown ...
- 网络流量预测 国内外研究现状【见评论】——传统的ARIMA、HMM模型,目前LSTM、GRU、CNN应用较多,貌似小波平滑预处理步骤非常关键
Time Series Anomaly Detection in Network Traffic: A Use Case for Deep Neural Networks from:https://j ...