走迷宫(用队列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 ...
随机推荐
- Environment.NewLine
https://docs.microsoft.com/en-us/dotnet/api/system.environment.newline?view=netframework-4.7.2 https ...
- 通过代码来操作SQLite的示例
Getting started with SQLite in C# http://blog.tigrangasparian.com/2012/02/09/getting-started-with-sq ...
- NOIP2016 T4 魔法阵 暴力枚举+前缀和后缀和优化
想把最近几年的NOIP T4都先干掉,就大概差16年的,所以来做一做. 然后这题就浪费了我一整天QAQ...果然还是自己太弱了QAQ 点我看题 还是pa洛谷的... 题意:给m个物品,每个物品有一个不 ...
- LightOJ 1027 A Dangerous Maze(期望)
https://cn.vjudge.net/problem/LightOJ-1027 题意:有n扇门,每扇门有个时间ti,选择正数的门可以在ti后带你走出迷宫,负数的门会在ti后带你回到起点,然后重新 ...
- POJ 3281 Dining(最大流)
http://poj.org/problem?id=3281 题意: 有n头牛,F种食物和D种饮料,每头牛都有自己喜欢的食物和饮料,每种食物和饮料只能给一头牛,每头牛需要1食物和1饮料.问最多能满足几 ...
- 16s workfollw
http://bioconductor.org/packages/devel/bioc/vignettes/metagenomeFeatures/inst/doc/Example_16S_Annota ...
- python stat获取文件信息
import os statinfo = os.stat('qqq.txt') print(statinfo,"\n") print(statinfo.st_mode) 输出 os ...
- 创建 shiny 应用程序
R 本身是一个优秀的数据分析和数据可视化平台.然而,我们通常不会将 R 和分析脚本提供给客户,让客户自己运行.数据分析的结果不仅可以在 HTML 网页.PDF 文档或 Word 文档中显示,还可以呈现 ...
- ddt中的data,unpack,file_data实现数据驱动--数据分离
ddt:Class decorator for subclasses of ``unittest.TestCase``. -----``unittest.testcase``子类的类修饰器. 首先介绍 ...
- Java中如何读写cookie (二)
Java中删除cookie Cookie[] cookies=request.getCookies(); //cookies不为空,则清除 if(cookies!=null ...