poj3984迷宫问题 广搜+最短路径+模拟队列
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, 0, 1, 0,
};
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
Input
Output
Sample Input
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
Sample Output
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
广度搜索还是老老实实用队列,可以采用模拟队列,自己记录队头和队尾,千万不要瞎试动态规划。。。。。。惨痛的教训。
输出路径的话可以反向追踪,从终点依次找到上一个点,直至原点。
参考代码:
#include<iostream>
using namespace std;
int map[][];
int vis[][];
struct node{
int x;
int y;
int pre;
}edge[];
int front=,rear=;//队头,队尾
int dir[][]={{,-},{,},{,},{-,}};
void f(int i)//倒向追踪法
{
if(edge[i].pre!=-)
{
f(edge[i].pre);
cout<<"("<<edge[i].x<<", "<<edge[i].y<<")"<<endl;
}
}
void BFS(int x,int y)
{
edge[front].x=x;
edge[front].y=y;
edge[front].pre=-;
while(front<rear)//队列为空时终止
{
int u;
for(u=;u<;u++)
{
int x=edge[front].x+dir[u][];
int y=edge[front].y+dir[u][];
if(x<||x>=||y<||y>=||vis[x][y]==||map[x][y]==)
continue;
else
{
vis[x][y]=;
map[x][y]=;
edge[rear].x=x;//入队
edge[rear].y=y;
edge[rear].pre=front;
rear++;
}
if(x==&&y==)
f(front);
}
front++;//出队
}
}
int main()
{
int i,j;
for(i=;i<;i++)
{
for(j=;j<;j++)
{
cin>>map[i][j];
}
}
memset(vis,,sizeof(vis));
cout<<"("<<"0, 0)"<<endl;
BFS(,);
cout<<"(4, 4)"<<endl;
return ;
}
poj3984迷宫问题 广搜+最短路径+模拟队列的更多相关文章
- POJ-3984-迷宫问题-BFS(广搜)-手写队列
题目链接:id=3984">http://poj.org/problem? id=3984 这个本来是个模板题,可是老师要去不能用STL里的queue,得自己手写解决.ORZ....看 ...
- poj 3083 Children of the Candy Corn (广搜,模拟,简单)
题目 靠墙走用 模拟,我写的是靠左走,因为靠右走相当于 靠左走从终点走到起点. 最短路径 用bfs. #define _CRT_SECURE_NO_WARNINGS #include<stdio ...
- HDU 1728 逃离迷宫 (广搜)
题目链接 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可 ...
- 广搜最短路径变形,(POJ3414)
题目链接:http://poj.org/problem?id=3414 解题报告: 1.每个节点都是一个独立的状态 2.这里的状态转移就是有几种出路,4种:1.倒掉a中的水,2.把a中的水倒到b中去, ...
- 双向广搜 POJ 3126 Prime Path
POJ 3126 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16204 Accepted ...
- poj 3984:迷宫问题(广搜,入门题)
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7635 Accepted: 4474 Description ...
- 队列&广搜
搜索里有深搜,又有广搜,而广搜的基础就是队列. 队列是一种特殊的线性表,只能在一段插入,另一端输出.输出的那一端叫做队头,输入的那一端叫队尾.是一种先进先出(FIFO)的数据结构. 正经的队列: 头文 ...
- 广搜,深搜,单源最短路径,POJ(1130),ZOJ(1085)
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=85 http://poj.org/problem?id=1130 这 ...
- POJ3984 BFS广搜--入门题
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20816 Accepted: 12193 Descriptio ...
随机推荐
- Fresco 使用笔记(一):加载gif图片并播放
项目总结 --------------------------------------------------------------------- 前言: 项目中图文混合使用的太多太多了,但是绝大部 ...
- [Android]编译错误:Could not get unknown property 'release' for SigningConfig container
使用Gradle进行安卓编译时,出现如下错误: Could not get unknown property 'release' for SigningConfig container. 原因: 在主 ...
- Emacs常用命令汇总
注意:以下命令中标注的按键,大写的C代表Control,在键盘上通常是Ctrl键,而M代表Meta,在键盘上通常是Alt键,S则代表Shift,在键盘上通常是Shift键,也就是 C Control ...
- C编程常见问题总结
本文是C编程中一些常见错误的总结,有些是显而易见的,有些则是不容易发现 本文地址:http://www.cnblogs.com/archimedes/p/get-screwed-c.html,转载请注 ...
- 朝花夕拾-android 一个注册新用户时,多步填写用户资料的框架
源码地址:http://git.oschina.net/zj2012zy/Android-Demo/tree/master/AndroidDemo/setpregister 效果如下: 基本思路: 1 ...
- iOS的高德地图标注特定位置
在开发时有时候遇到项目里面需要展示公司的位置,这时如果导入百度地图什么的就太浪费资源,而且还占内存 这时只要调用自动高德地图的就行了 自己写一个控制器,导入框架 现在导入系统框架只要多打次就能出来了, ...
- mysql数据库---同时插入两个表以上的数据
mysql数据库问题,如何同一个操作添加两个表(a表,b表),并把b表的id添加到a表字段中,b表id自动增长 在数据库中创建存储过程,比如存储过程的名字叫做 test在java中和正常使用sql的方 ...
- Docker 基础命令 简要入门
本文出自:http://www.cnblogs.com/scoter2008,本文将持续更新所有docker都可以通过man查看帮助:man docker [ps|top|run|...]1.列出正在 ...
- jenkins maven svn 部署web项目到本地Tomcat
查了N多网页,折腾了几个小时,终于部署成功,部署的过程比较坎坷,遇到各种问题,记录一下,不管大家是否会遇到的同样的问题,希望有所帮助: 常规操作: 1.下载jenkins,必须要做的一步,http:/ ...
- Centos 部署Keepalive高可用软件
Keepalive安装部署 一.环境介绍 1)Centos6.4 2) keepalived-1.2.12 3) 主备机的ip Master:172.31.100.5 Slave: 172.31. ...