迷宫问题

    题目大意:给你一个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的更多相关文章

  1. poj3984迷宫问题 广搜+最短路径+模拟队列

    转自:http://blog.csdn.net/no_retreats/article/details/8146585   定义一个二维数组: int maze[5][5] = { 0, 1, 0, ...

  2. poj3984迷宫问题

    一个5 × 5的二维数组,表示一个迷宫.其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. 很简单的一道题,迷宫问题,一般都选择两种优先搜索 ...

  3. poj3984迷宫问题(DFS广搜)

    迷宫问题 Time Limit: 1000MSMemory Limit: 65536K Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, ...

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

  5. POJ-3984.迷宫问题(BFS + 路径输出)

    昨天中午做的这道题,结果蛙了一整天,就因为一行代码困住了,今天算是见识到自己有多菜了.流泪.jpg 本题大意:给一个5 * 5的迷宫,1表示墙壁,0表示通路,从左上角走到右下角并输出路径. 本题思路: ...

  6. poj3984迷宫问题(dfs+stack)

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 35426   Accepted: 20088 Descriptio ...

  7. POJ3984 迷宫问题 —— BFS

    题目链接:http://poj.org/problem?id=3984 迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  8. POJ3984——迷宫问题

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31616   Accepted: 18100 Descriptio ...

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

随机推荐

  1. 安装Apache提示APR not found的解决办法

    不知道为什么在安装apache2.2.22版本的时候没有任何问题,直接使用命令 ./configure --prefix=/home/www/www_test/software/apache-2.2. ...

  2. PHP simpleXML文件编程

    SimpleXML simpleXML该技术的核心思想是以面向对象的方式来操作xml文件 <?php //simplexml文件 讲所有的元素转成对象 $library=simplexml_lo ...

  3. VxWorks启动流程

    镜像种类不同,VxWorks的启动过程会有所不同. 我们项目中使用的是加载型VxWorks镜像 函数 函数功能 所在文件 bootTask() (a)    通过createBootLineFromF ...

  4. MP4文件格式的解析

    MP4文件格式的解析,以及MP4文件的分割算法 mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime.以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心 ...

  5. Caused by: java.lang.ClassNotFoundException: org.jbpm.pvm.internal.processengine.SpringHelper

    1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...

  6. Linux以GB显示内存大小

    Linux以GB显示内存大小 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ free -g total used free shared buffers ca ...

  7. fineuploader使用实例

    1.Fine Uploader特点 Fine Uploader Features: A:支持文件上传进度显示. B:文件拖拽浏览器上传方式 C:Ajax页面无刷新. D:多文件上传. F:跨浏览器. ...

  8. Django学习-3-请求流程

    Django请求生命周期     -> URL对应关系(匹配) -> 视图函数 -> 返回用户字符串     -> URL对应关系(匹配) -> 视图函数 -> 打 ...

  9. 微信小程序之上传下载交互api

    wx.request(OBJECT) OBJECT参数说明: 参数名 类型 必填 说明 url String 是 开发者服务器接口地址 data Object.String 否 请求的参数 heade ...

  10. Codeforces Round #432 (Div. 1) B. Arpa and a list of numbers

    qtmd的复习pat,老子不想看了,还不如练几道cf 这题首先可以很容易想到讨论最后的共因子为素数 这个素数太多了,1-1e6之间的素数 复杂度爆炸 所以使用了前缀和,对于每个素数k的每个小区间 (k ...