poj 3984 迷宫问题 BFS
/*
题目:
求最少时间从(0,0)走到(4,4)的路径
分析:
纯粹BFS题目,不过需要打印路径,可以用数组记录当前的坐标的上一个坐标,
因为BFS构造出一棵BFS最优生成树,每一个节点的父母节点都是唯一的,具体
参考算法导论。。。
*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
#define X 6
int map[X][X],pre[X][X];
bool visit[X][X];
struct node
{
int x,y;
};
void print(int x,int y) //打印路径
{
if(x||y) //一直递归到起始的(0,0)为止,然后不停输出到(4,4)走过的路
print(pre[x][y]/10,pre[x][y]%10);
if(pre[x][y]!=-1&&pre[x][y]!=-1) //不输出(0,0)以前的坐标。。。
printf("(%d, %d)\n",pre[x][y]/10,pre[x][y]%10);
}
void bfs()
{
queue<node> q;
node temp,cur;
temp.x = 0;
temp.y = 0;
q.push(temp);
int x,y;
visit[0][0] = true;
while(!q.empty()) //BFS核心
{
cur = q.front();
q.pop();
x = cur.x;
y = cur.y;
if(x==4&&y==4)
print(4,4);
if(x&&!visit[x-1][y]&&!map[x-1][y])//往上走
{
visit[x-1][y] = true;
temp.x = x-1;
temp.y = y;
pre[x-1][y] = x*10+y;
q.push(temp);
}
if(y&&!map[x][y-1]&&!visit[x][y-1]) //往左走
{
visit[x][y-1] = true;
temp.x = x;
temp.y = y-1;
pre[x][y-1] = x*10+y;
q.push(temp);
}
if(y<4&&!map[x][y+1]&&!visit[x][y+1])//往右走
{
visit[x][y+1] = true;
temp.x = x;
temp.y = y+1;
pre[x][y+1] = x*10+y;
q.push(temp);
}
if(x<4&&!map[x+1][y]&&!visit[x+1][y])//往下走
{
visit[x+1][y] = true;
temp.x = x+1;
temp.y = y;
pre[x+1][y] = x*10+y;
q.push(temp);
}
}
}
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
while(cin>>map[0][0])
{
memset(pre,-1,sizeof(pre));
memset(visit,false,sizeof(visit));
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
if(i||j)
scanf("%d",&map[i][j]);
bfs();
printf("(%d, %d)\n",4,4);//最后打印最后的坐标
}
return 0;
}
转载于:https://www.cnblogs.com/yejinru/archive/2012/03/01/2376292.html
poj 3984 迷宫问题 BFS相关推荐
- POJ 3984 迷宫问题 BFS DFS两种解法
题目地址:点这里 迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18495 Accepted: 10947 Descr ...
- POJ 3984 迷宫问题 BFS求最短路线+路径记录
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31050 Accepted: 17826 Descriptio ...
- 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】
POJ3126Prime Path 给定两个四位素数a b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数 与 前一步得到的素数 只能有一个位 ...
- POJ 3984 迷宫问题 (Dijkstra)
迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, ...
- (简单) POJ 3984 迷宫问题,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 迷宫问题
定义一个二维数组: 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, ...
- K - 迷宫问题 POJ - 3984
K - 迷宫问题 POJ - 3984 5*5迷宫,输出从(0,0)走到(4,4)的最短路径 类似康托,自己弄个一一对应的公式即可 #include<iostream> #include& ...
- POJ 3414 Pots【BFS】+ Python
原题链接: 3414 -- Pots 参考资料:POJ 3414 - Pots | 眈眈探求 POJ 3414 Pots[BFS][图搜] - it610.com 一 特别注意: 1. 每一种操作对应 ...
- c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)
题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...
最新文章
- 26条面试经典问答(真实工作经验)
- 您如何在PHP中解析和处理HTML / XML?
- FTP服务器serv-u
- 复数特征值求特征向量_深刻地认识特征值
- 【论文学习】Bringing Old Photos Back to Life
- 非root用户安装protobuf的python依赖到指定目录
- 《深度学习工程师》听课笔记,编程作业和课后练习
- 《WF编程》系列之29 - 本地通信事件:HandleExternalEventActivity 活动生成器
- 计算机里文本格式,设置计算机以更改文本文档格式,如何更改文本文档格式-...
- 学了计算机很迷茫怎么办?计算机大三学生怎么找实习工作?
- 基于SPSS的医疗医保费用数据分析预测(C#)
- 【信息学奥赛】1005:地球人口承载力估计(C++)
- 光流传感器 定位精度_光流定位原理是什么??
- 计算机清内存,电脑内存清理命令是什么
- 论文阅读:《Neural Machine Translation by Jointly Learning to Align and Translate》
- python获取鼠标的当前坐标
- 计算机基础08在线测试,《计算机应用基础》在线测试..doc
- Mac安装ACC提示“无法检查更新 请检查您的互联网连接,然后再试一次“解决方法
- Centos7之pacemaker高可用安装配置
- 钜泉光电2018年 IC校招笔试题目
热门文章
- python软件代码示例-python 示例代码1
- python程序从哪里开始执行-python如何启动
- python映射类型-Python 映射类型字典dict操作定义
- python是基于什么语言开发-2.python是什么编程语言。
- python画图代码彩虹-用python画一颗彩虹色爱心送给女朋友!!!
- python开发的软件sparrow-sparrow
- python代码块-Python 代码块
- python工程师薪资坑吗-Python中反人类直觉的特性,你踩过坑吗?
- python编程培训-马哥教育官网-专业Linux培训班,Python培训机构
- python一次性读取整个文件-python – 如何一次读取和附加到文本文件?