POJ 3984---迷宫问题
来源:互联网 发布:淘宝华佗大药房旗舰店 编辑:程序博客网 时间:2024/05/29 05:12
题目大意:
按样例输入,寻找从最左上角到最右下角最短的一条路,并输出路径。
解题思路:
一看题,我们知道是求最短路,故可用BFS来做。
代码如下:
#include <cstdio>
#include <cstring>
#include <queue>
#include <iostream>
using
namespace
std;
struct
Node {
int
x, y;
Node() {}
Node(
int
x,
int
y):x(x), y(y) {}
//这里就是简单的初始化属性,方便操作
};
int
maze[5][5];
int
pathx[5][5], pathy[5][5];
bool
vis[5][5];
int
dir[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};
void
bfs() {
/*因为搜索最短路径且已知最短路径的走向所以起始位置已知且暴力搜索不会超时果断bfs */
queue<Node> Q;
Q.push(Node(0, 0));
/*依稀记得柴哥讲的小技巧在结构体里直接在构造函数初始化当前点的x,y */
vis[0][0] = 1;
while
(!Q.empty()) {
Node t = Q.front();
Q.pop();
for
(
int
i = 0; i < 4; i++) {
/*广度搜索规则是将临近的点搜索完按照先进先出此前添加到队列的点的顺序再次扫描 */
int
x = t.x + dir[i][0];
int
y = t.y + dir[i][1];
if
(x < 0 || x >= 5 || y < 0 || y >= 5 || vis[x][y] || maze[x][y])
//这里只要控 制在5*5的格子内即可
continue
;
pathx[x][y] = t.x;
//打印路径因此保存
pathy[x][y] = t.y; //这里直接按照输出的打印路径将坐标保存在路径上
vis[x][y] = 1;
Q.push(Node(x, y));
}
}
}
void
print(
int
x,
int
y) {
if
(x == 0 && y == 0) {
printf
(
"(%d, %d)\n"
, x, y);
return
;
}
print(pathx[x][y], pathy[x][y]);
/*这里就是将要输出的路径保存在路径上的原因像一个递归一样从终点逆向回到起点并将路径打印出来 */
printf
(
"(%d, %d)\n"
, x, y);
}
int
main() {
//此题反应了半天发现只有5*5的大小
for
(
int
i = 0; i < 5; i++)
for
(
int
j = 0; j < 5; j++)
scanf
(
"%d"
,&maze[i][j]);
memset
(vis, 0,
sizeof
(vis));
bfs();
print(4, 4);
return
0;
}
0 0
- poj 3984 迷宫问题
- poj 3984 迷宫问题
- POJ-3984-迷宫问题
- Poj 3984 迷宫问题
- 迷宫问题 poj 3984
- poj 3984迷宫问题
- poj 3984 迷宫问题
- POJ-3984-迷宫问题
- poj 3984- 迷宫问题
- POJ 3984 迷宫问题
- poj 3984 迷宫问题
- poj 3984:迷宫问题
- POJ-3984-迷宫问题
- POJ 3984 迷宫问题
- poj 3984迷宫问题
- POJ 3984 迷宫问题
- POJ 3984 迷宫问题
- poj 3984 迷宫问题
- hdu 5944 等比数列 fxx and string
- mybatis中association和collection的column传入多个参数值
- 【leetcode】111. Minimum Depth of Binary Tree
- c++模板函数
- |洛谷|并查集|P1525 关押罪犯
- POJ 3984---迷宫问题
- chromium for linux 编译
- Linux下搭建tomcat集群全记录
- notepad++运行python
- 模拟hibernate(反射+sql拼接)
- Open CV学习记录(十三)——HcVision码流
- 第十周项目三-利用二叉树遍历思想解决问题
- 分布式系统的特点及设计理念
- 带你去看——WRC 2016 世界机器人博览会