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, 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)
//update:2019蓝桥杯原题变式
BFS经典题。需要在结构体中定义c记录当前下标,用f记录父节点下标。输出路径时由叶节点遍历到根节点,逆序输出。
#include<stdio.h>
#include<queue>
using namespace std; int a[][],b[][],rx[],ry[];
int t[][]={{,},{,},{-,},{,-}};
struct Node{
int x,y,s,f,c;
}node[];
int main()
{
int c,tx,ty,f,i,j;
queue<Node> q;
for(i=;i<=;i++){
for(j=;j<=;j++){
scanf("%d",&a[i][j]);
}
}
node[].x=;
node[].y=;
node[].s=;
node[].f=;
node[].c=;
b[][]=;
q.push(node[]);
c=;f=;
while(q.size()){
for(i=;i<;i++){
c++;
tx=q.front().x+t[i][];
ty=q.front().y+t[i][];
if(tx<||ty<||tx>||ty>) continue;
if(a[tx][ty]==&&b[tx][ty]==){
b[tx][ty]=;
node[c].x=tx;
node[c].y=ty;
node[c].s=q.front().s+;
node[c].f=q.front().c;
node[c].c=c;
q.push(node[c]);
}
if(tx==&&ty==){
int cc=c;
for(j=node[c].s+;j>=;j--){
rx[j]=tx-;
ry[j]=ty-;
cc=node[cc].f;
tx=node[cc].x;
ty=node[cc].y;
}
for(j=;j<=node[c].s+;j++){
printf("(%d, %d)\n",rx[j],ry[j]);
}
f=;
break;
}
}
if(f==) break;
q.pop();
}
return ;
}
POJ - 3984 迷宫问题 BFS求具体路径坐标的更多相关文章
- POJ 3984 - 迷宫问题 - [BFS水题]
题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...
- POJ 3984 迷宫问题 bfs 难度:0
http://poj.org/problem?id=3984 典型的迷宫问题,记录最快到达某个点的是哪个点即可 #include <cstdio> #include <cstring ...
- poj 3984 迷宫问题 bfs
学会这道水题之后我懂得了不少哈,首先水题也能学到不少知识,尤其像我这样刚入门的小菜鸟,能学到一些小技巧. 然后就是可以从别人的代码里学到不一样的思路和想法. 这题就是求最短的路径,首先想到就是用bfs ...
- [POJ 3984] 迷宫问题(BFS最短路径的记录和打印问题)
题目链接:http://poj.org/problem?id=3984 宽度优先搜索最短路径的记录和打印问题 #include<iostream> #include<queue> ...
- POJ 3984 迷宫问题 (BFS + Stack)
链接 : Here! 思路 : BFS一下, 然后记录下每个孩子的父亲用于找到一条路径, 因为寻找这条路径只能从后向前找, 这符合栈的特点, 因此在输出路径的时候先把目标节点压入栈中, 然后不断的向前 ...
- POJ - 3984 迷宫问题 bfs解法
#include<stdio.h> #include<string.h> #include<algorithm> #include<stack> usi ...
- BFS(最短路+路径打印) POJ 3984 迷宫问题
题目传送门 /* BFS:额,这题的数据范围太小了.但是重点是最短路的求法和输出路径的写法. dir数组记录是当前点的上一个点是从哪个方向过来的,搜索+,那么回溯- */ /************* ...
- POJ 3984 迷宫问题(简单bfs+路径打印)
传送门: http://poj.org/problem?id=3984 迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions ...
- (简单) 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, ...
随机推荐
- 学习FPGA需要做哪些
有些人比较差,做了一些介绍,有误导成分.有些人水平太高,介绍的很好,但是很多人依旧听不懂,得到的肯定很少.学习FPGA,在不同层次的人明显有不同的答案. 熟悉硬件描述语言语法,不需要什么都会,但是要记 ...
- 配置和启动脚本(bash shell学习01)
bash是 Bourne Again Shell简称 ,从unix系统的sh发展而来 查看当前shellecho $SHELL查看系统支持的shellcat /etc/shells cd /binls ...
- 蓝桥杯 基础练习 BASIC-12 十六进制转八进制
基础练习 十六进制转八进制 时间限制:1.0s 内存限制:512.0MB 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n&l ...
- H5浏览器播放RTMP直播流
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Inse ...
- JAVA 1.7并发之LinkedTransferQueue原理理解
昨天刚看完BlockingQueue觉得好高级啊,今天扫到1.7就发现了升级版.... 如果对内容觉得不够充分,可以去看http://www.cs.rochester.edu/u/scott/pape ...
- MyBatis多表映射demo
三个实体类,作者.文章和评论. public class Author { private int id; private String username; private String nickna ...
- appiumsend_keys很慢的解决方法
desired_caps['unicodeKeyboard']='True' desired_caps['resetKeyboard']='True' 添加这两个项,默认使用appium ...
- MySQL5.7新特性
MySQL5.7介绍 身处 MySQL 这个圈子,能够切身地感受到大家对 MySQL 5.7 的期待和热情,似乎每个人都迫不及待的想要了解.学习和使用 MySQL 5.7.那么,我们不禁要问, MyS ...
- MySQL备份还原之二使用mysqldump
1 场景描述: create table gyj_t1(id int,name varchar(10)); insert into gyj_t1 values(1,'AAAAA'); commit; ...
- c# 程序调用cmd执行命令如SVN.exe
c# 程序调用cmd执行命令如SVN.exe string str = Console.ReadLine(); System.Diagnostics.Process p = new System.Di ...