ACM:图的BFS,走迷宫
题目:
一个网格迷宫由n行m列的单元格组成,每一个单元格要么是空地(用1表示),要么是障碍物(用0来表示)。你的任务是找一条从起点到终点的最短移动序列,当中UDLR分别表示往上、下、左、右移动到相邻单元格。不论什么时候都不能在障碍格中。也不能走到迷宫之外。起点和终点保证是空地。
分析:图的BFS。
#include <iostream>
#include <string>
#include <queue>
using namespace std; const int MAXN = 500;
int maze[MAXN][MAXN], vis[MAXN][MAXN], dist[MAXN][MAXN], fa[MAXN][MAXN], last_dir[MAXN][MAXN];
int n, m, xs, ys, xt, yt; int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
char name[] = "UDLR"; void print_path(int x, int y) { //以递归的方式打印路径
int fx = fa[x][y] / m;
int fy = fa[x][y] % m;
if(fx != x || fy != y) {
print_path(fx, fy);
putchar(name[last_dir[x][y]]);
}
} int dir[MAXN*MAXN];
void print_path2(int x, int y) { //以迭代的方式打印路径
int c = 0;
for(;;) {
int fx = fa[x][y] / m;
int fy = fa[x][y] % m;
if(fx == x && fy == y) break;
dir[c++] = last_dir[x][y];
x = fx;
y = fy;
}
while(c--) putchar(name[dir[c]]);
} queue<int> q;
void bfs(int x, int y) {
int u = x*m+y;
dist[x][y] = 0; //初始化自己到自己的距离就是0
fa[x][y] = u; //起点的父亲节点就是自己,方便后面的打印操作
vis[x][y] = 1;
q.push(u);
while(!q.empty()) {
u = q.front();
q.pop();
x = u/m;
y = u%m;
for(int d = 0; d < 4; ++d) {
int nx = x + dx[d];
int ny = y + dy[d];
if(nx >= 0 && nx < n && ny >= 0 && ny < m && maze[nx][ny] && !vis[nx][ny]) {
int v = nx * m + ny;
q.push(v);
vis[nx][ny] = 1;
dist[nx][ny] = dist[x][y] + 1; //走的步数+1
fa[nx][ny] = v; //记录父亲结点
last_dir[nx][ny] = d; //记录如今这个节点到父亲节点走的方向
}
}
}
} int main() {
cin >> n >> m >> xs >> ys >> xt >> yt;
for(int i = 0; i < n; ++i) {
for(int j = 0; j < m; ++j) {
cin >> maze[i][j];
}
}
memset(vis, 0, sizeof(vis));
bfs(xs, ys);
print_path(xt, yt);
cout << endl;
print_path2(xt, yt);
cout << endl;
return 0;
}
ACM:图的BFS,走迷宫的更多相关文章
- 一本通之 一堆迷宫 (Dungeon Master&走出迷宫&走迷宫)
一本通在线崩溃....... . 有图有真相 这是个三维迷宫,其实和二位迷宫差不多,只是方向多加了2个. 但这个题的输入十分恶心,一度被坑的用cin.ignore(),但还是不过... 它的正确输入方 ...
- ACM:图BFS,迷宫
称号: 网络格迷宫n行m单位列格组成,每个单元格无论空间(使用1表示),无论是障碍(使用0为了表示).你的任务是找到一个动作序列最短的从开始到结束,其中UDLR同比分别增长.下一个.左.向右移动到下一 ...
- HDU 2102 A计划(BFS/DFS走迷宫)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 【BZOJ2707】[SDOI2012]走迷宫 Tarjan+拓扑排序+高斯消元+期望
[BZOJ2707][SDOI2012]走迷宫 Description Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,M ...
- Java基于OpenCV实现走迷宫(图片+路线展示)
Java基于OpenCV实现走迷宫(图片+路线展示) 由于疫情,待在家中,太过无聊.同学发了我张迷宫图片,让我走迷宫来缓解暴躁,于是乎就码了一个程序出来.特此记录. 原图: 这张图,由于不是非常清晰, ...
- ACM/ICPC 之 BFS(离线)+康拓展开(TSH OJ-玩具(Toy))
祝大家新年快乐,相信在新的一年里一定有我们自己的梦! 这是一个简化的魔板问题,只需输出步骤即可. 玩具(Toy) 描述 ZC神最擅长逻辑推理,一日,他给大家讲述起自己儿时的数字玩具. 该玩具酷似魔方, ...
- sdut 2449走迷宫【最简单的dfs应用】
走迷宫 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_ 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m) ...
- BZOJ 2707: [SDOI2012]走迷宫( tarjan + 高斯消元 )
数据范围太大不能直接高斯消元, tarjan缩点然后按拓扑逆序对每个强连通分量高斯消元就可以了. E(u) = 1 + Σ E(v) / degree(u) 对拍时发现网上2个程序的INF判断和我不一 ...
- NYOJ306 走迷宫(dfs+二分搜索)
题目描写叙述 http://acm.nyist.net/JudgeOnline/problem.php?pid=306 Dr.Kong设计的机器人卡多非常爱玩.它经常偷偷跑出实验室,在某个游乐场玩之不 ...
随机推荐
- 表格插件datatables
具体用法查看官网 https://datatables.net/ {% load staticfiles %} <!DOCTYPE html> <html lang="en ...
- [BZOJ5293][BJOI2018]求和(倍增)
裸的树上倍增. #include<cstdio> #include<cstring> #include<algorithm> #define rep(i,l,r) ...
- LOJ.114.K大异或和(线性基)
题目链接 如何求线性基中第K小的异或和?好像不太好做. 如果我们在线性基内部Xor一下,使得从高到低位枚举时,选base[i]一定比不选base[i]大(存在base[i]). 这可以重构一下线性基, ...
- 20162327WJH2016-2017-2《程序设计与数据结构》课程总结
20162327WJH2016-2017-2<程序设计与数据结构>课程总结 一.每周作业链接汇总 第一周作业:算法分析 第三周作业:查找与排序 第五周作业:有关栈的总结 第七周作业:树的有 ...
- DeveloperAppleHelp
UIKit: 1.UIKit User Interface Catalog 视图 View控件 2.View Programming Guide for iOS 视图编程,用代码 构建界面. 3. ...
- Date与String间的转换
一.Date-->String :格式化过程 1. DateFormat :String format(Date d) 2.SimpleDateFormat是继承DateFormat(抽象类)的 ...
- webpack4 + vue + vue-router + vuex
ps: 所有案例使用的 node 及 npm 版本如下 node版本: v8.4.0 npm: 5.3.0 下一个案例默认是接着上一个继续写的 建议先熟悉以下文档 vue vue-router vue ...
- 2. python 字符串常量
2. python 字符串常量 1.单双引号字符串是一样的 >>> 'abc',"abc" ('abc', 'abc') >>> 当 ...
- arcgis runtime 100 Create geometries
1 /* Copyright 2016 EsriEsri 2 * 3 * Licensed under the Apache License, Version 2.0 (the "Licen ...
- CHM编写软件
工具选择 1. HTML编辑工具:就是用什么软件写文档的问题.一直都是做.NET开发,所以选择HTML编辑也大都在MS阵营里选.主要有以下几种HTML编辑器. (1) Dr ...