POJ-3984.迷宫问题(BFS + 路径输出)
昨天中午做的这道题,结果蛙了一整天,就因为一行代码困住了,今天算是见识到自己有多菜了。流泪.jpg
本题大意:给一个5 * 5的迷宫,1表示墙壁,0表示通路,从左上角走到右下角并输出路径。
本题思路:主要就是BFS寻路,为了方便打印,从右下角开始进行BFS。
注意输出时候的大坑,会有标记。
本题代码:
#include <cstdio>
#include <queue>
#include <map>
using namespace std; typedef pair<int ,int > P;
const int n = , INF = 1e7;
int maze[n][n], d[n][n], dx[] = {, , -, }, dy[] = {, , , -};
P path[n][n];//用来保存每个结点的父节点,方便输出 void bfs() {
queue <P> s;
s.push(P(, ));//从终点到起点方便路径打印
for(int i = ; i < n; i ++)
for(int j = ; j < n; j ++) {
d[i][j] = INF;
path[i][j] = P(-, -);
}
d[][] = ;
while(s.size()) {
P p = s.front();
if(p.first == && p.second == ) break;
s.pop();
for(int i = ; i < ; i ++) {
int nx = p.first + dx[i], ny = p.second + dy[i];
if(nx >= && nx < n && ny >= && ny < n && maze[nx][ny] == && d[nx][ny] == INF) {
s.push(P(nx, ny));
d[nx][ny] = d[p.first][p.second] + ;
path[nx][ny] = P(p.first, p.second);
}
}
}
} int main () {
for(int i = ; i < n; i ++)
for(int j = ; j < n; j ++)
scanf("%d", &maze[i][j]);
bfs();
P p = make_pair(, );
while(p.first != -) {
printf("(%d, %d)\n", p.first, p.second);
int tmp = p.first;//这个很坑,坑了我4个小时,修改值之前进行记录
p.first = path[p.first][p.second].first;
p.second = path[tmp][p.second].second;
}
return ;
}
POJ-3984.迷宫问题(BFS + 路径输出)的更多相关文章
- 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, ...
- POJ - 3984迷宫问题(最短路径输出)
题目链接:http://poj.org/problem?id=3984 题目: 迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submiss ...
- POJ 3984 迷宫问题 记录路径的广搜
主要是学一下如何在广搜中记录路径:每找到一个点我就记录下这个点是由那个点得来的,这样我找到最后个点后,我就可以通过回溯得到我走过的路径,具体看代码吧~ #include<cstdio> # ...
- 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 ...
随机推荐
- jsp中文乱码
<%@page pageEncoding="UTF-8"%> <meta http-equiv="Content-Type" content= ...
- windows 运行hadoop的WordCount报nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)
window eclipse连接hadoop集群,本地运行wordcount,报以下错误,尝试网络上的方法无果,如:换64JDK,添加hadoop_home,path,以及在hadoop\bin和c: ...
- leetcode1005
func largestSumAfterKNegations(A []int, K int) int { sort.Ints(A) var negatives int var zeros int va ...
- Android编程权威指南(第三版)- 2.8 挑战练习:添加后退按钮
package com.example.geoquiz; import android.support.v7.app.AppCompatActivity; import android.os.Bund ...
- vue格式化显示json数据
已经是json格式数据的,直接用标签 <pre></pre>展示. 参考:https://www.jianshu.com/p/d98f58267e40
- python语言中的数据类型之列表
数据类型及内置方法 列表: list 可变类型,有序 用途:用来记录多个值(同属性) 定义方式:在[ ]内用逗号分隔开多个任意类型的值 l=['a','b','c'] #l=list(['a' ...
- 深入Spring Boot:怎样排查expected single matching bean but found 2的异常
写在前面 这个demo来说明怎么排查一个常见的spring expected single matching bean but found 2的异常. https://github.com/hengy ...
- ASP.NET Form身份验证方式详解
注:不会涉及ASP.NET的登录系列控件以及membership的相关话题, 我只想用比较原始的方式来说明在ASP.NET中是如何实现身份认证的过程. ASP.NET身份认证基础 在开始今天的博客 ...
- KVM虚拟化技术(一)虚拟化简介
一 .虚拟化 虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行.虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程.CPU的虚拟化技术可以单CPU模 拟多CPU并行,允许一个平台同时运行多个 ...
- spring boot 开发非web应用程序