[poj3984]迷宫问题_bfs
迷宫问题
题目大意:给你一个5*5的矩阵,求左上角到左下角的最短路径。
注释:0或1的矩阵,1表示不能走,0表示能走,保证有唯一最短路径。
想法:bfs爆搜练习题。通过其实点,定义方向数组,然后进行bfs遍历即可。
最后,附上丑陋的代码... ...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
struct Pair
{
int x,y;
};
int a[10][10];
queue<Pair> q;
Pair before[10][10];
Pair ans[50];
bool dis[10][10];
int d[5][3]={{0,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
bool check(int x,int y)//判断当前点是否合法
{
if(x>=0&&x<=4&&y>=0&&y<=4&&a[x][y]==0) return true;
return false;
}
int main()
{
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
scanf("%d",&a[i][j]);
}
}
Pair mid;
mid.x=0;
mid.y=0;
q.push(mid);//起始暴搜点
dis[0][0]=1;
while(!q.empty())
{
mid=q.front();q.pop();
int x=mid.x,y=mid.y;
if(x==4&&y==4) break;
for(int i=1;i<=4;i++)
{
if(check(x+d[i][1],y+d[i][2])&&dis[x+d[i][1]][y+d[i][2]]==false)
{
dis[x+d[i][1]][y+d[i][2]]=1;
Pair c;
c.x=x+d[i][1];c.y=y+d[i][2];
q.push(c);before[c.x][c.y]=mid;
}
}
}
Pair k;
k.x=4,k.y=4;
int cnt=0;
ans[++cnt]=k;
bool flag=false;
while(1)
{
if(flag) break;
k=before[k.x][k.y];
ans[++cnt]=k;
if(!k.x&&!k.y) flag=true;
}
for(int i=cnt;i>=1;i--)//答案要求从左上角输出至右下角
{
printf("(%d, %d)\n",ans[i].x,ans[i].y);
}
return 0;
}
小结:水题,注意bfs时需要pop以及边界特判。方向数组的第二维如果从一开始有意义的话需要多写一个0.
[poj3984]迷宫问题_bfs的更多相关文章
- poj3984迷宫问题 广搜+最短路径+模拟队列
转自:http://blog.csdn.net/no_retreats/article/details/8146585 定义一个二维数组: int maze[5][5] = { 0, 1, 0, ...
- poj3984迷宫问题
一个5 × 5的二维数组,表示一个迷宫.其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. 很简单的一道题,迷宫问题,一般都选择两种优先搜索 ...
- poj3984迷宫问题(DFS广搜)
迷宫问题 Time Limit: 1000MSMemory Limit: 65536K Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, ...
- 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, ...
- POJ-3984.迷宫问题(BFS + 路径输出)
昨天中午做的这道题,结果蛙了一整天,就因为一行代码困住了,今天算是见识到自己有多菜了.流泪.jpg 本题大意:给一个5 * 5的迷宫,1表示墙壁,0表示通路,从左上角走到右下角并输出路径. 本题思路: ...
- poj3984迷宫问题(dfs+stack)
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35426 Accepted: 20088 Descriptio ...
- POJ3984 迷宫问题 —— BFS
题目链接:http://poj.org/problem?id=3984 迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions ...
- POJ3984——迷宫问题
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31616 Accepted: 18100 Descriptio ...
- POJ-3984 迷宫问题(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, ...
随机推荐
- linux下ffmpeg安装
1.ffmpeg下载地址: http://www.ffmpeg.org/download.html 2.解压 1 $ tar zvfj ffmpeg.tar.bz2 这里作者假设已经重命名为ffmpe ...
- JLINK(SEGGER)灯不亮 USB不识别固件修复、clone修改
今天调SMT32插拔几下,JLINK竟然挂掉了网上找了这个教程,搞了半天才搞好,驱动没装好!WIN7系统,自动安装的驱动是GPS.COM10,郁闷,错误来的.应该是:atm6124.sys.要手动选择 ...
- 图像处理------基于Otsu阈值二值化
一:基本原理 该方法是图像二值化处理常见方法之一,在Matlab与OpenCV中均有实现. Otsu Threshing方法是一种基于寻找合适阈值实现二值化的方法,其最重 要的部分是寻找图像二值化阈值 ...
- Unity3d开发中与oc交互之类型转换
对于非科班出身的程序来说,在没有学过C和OC的情况,用unity开发iOS相关的功能,是非常痛苦的.简单写一下自己遇到的,并且没有百度到的坑. 1.C#给OC传递字典 一般流程是,C#调用C,C调用O ...
- HALCON不支持的设备中,获取图像
HALCON不支持的设备中,获取图像 参考(HALCON手册): Solution_guide_II_A_image_acquisiton.pdf image_acquisition_interf ...
- Struts2的数据封装
在很多的实际开发场景中,页面提交请求参数Action ,在Action中接收参数并对接收的数据进行封装.封装到一个JavaBean中,将JavaBean传递给业务层中.Struts2数据封装分为两类: ...
- SpringMVC国际化支持
这周公司领导希望我对一个项目,出一个国际化的解决方案,研究两个小时,采用了SpringMVC的国际化支持,在此记录下. 原理: 在DispatchServlet中注册localeResolver(区域 ...
- 【POJ3683】Priest John's Busiest Day
题目 John is the only priest in his town. September 1st is the John's busiest day in a year because th ...
- 【Chrome控制台】获取元素上绑定的事件信息以及监控事件
需求场景 在前端开发中,偶尔需要验证下某个元素上到底绑定了哪些事件,以及监控某个元素上的事件触发情况. 解决方案 普通操作 之前面对这种情况,一般采取的措施就是在各个事件里写console.info, ...
- 关系型数据库工作原理-时间复杂度(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...