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,迷宫的更多相关文章
- QDUOJ 生化危机 邻接表存图+BFS
生化危机 发布时间: 2015年10月10日 18:05 时间限制: 1000ms 内存限制: 256M 描述 X博士想造福人类, 研发一种可以再生肢体的药物, 可是很不幸......研究失败 ...
- BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS
BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS Description Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N ...
- (图 BFS)走迷宫
题目: 给一个迷宫,求出从起点到终点的路径.迷宫 src.txt 文件内容如下,第一行是迷宫的行列数,后面行是迷宫,1表示可行走,0表示不可以通过,起点是最左上角,终点是最右下角: 解析: 其实就是图 ...
- HDU 4444 Walk (离散化建图+BFS+记忆化搜索) 绝对经典
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4444 题意:给你一些n个矩形,给你一个起点,一个终点,要你求从起点到终点最少需要转多少个弯 题解:因为 ...
- ZOJ 3781 - Paint the Grid Reloaded - [DFS连通块缩点建图+BFS求深度][第11届浙江省赛F题]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3781 Time Limit: 2 Seconds Me ...
- HDU 4444:Walk(思维建图+BFS)***
http://acm.hdu.edu.cn/showproblem.php?pid=4444 题意:给出一个起点一个终点,给出n个矩形的两个对立顶点,问最少需要拐多少次弯可以从起点到达终点,如果不能输 ...
- 算法系列之图--BFS
广度优先搜索以源结点s为出发点,算法始终将已发现和未发现结点之间的边界,沿其广度方向向外扩展.也即算法需要在发现所有距离源结点s为k的所有结点之后才会去发现距离源结点距离为k+1的其他结点. talk ...
- hdu 4444 Walk (离散化+建图+bfs+三维判重 好题)
Walk Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submi ...
- 【BZOJ3417】Poi2013 Tales of seafaring 分层图BFS
[BZOJ3417]Poi2013 Tales of seafaring Description 一个n点m边无向图,边权均为1,有k个询问 每次询问给出(s,t,d),要求回答是否存在一条从s到t的 ...
随机推荐
- Heritrix与Nutch对比
Nutch 开发语言:Java http://lucene.apache.org/nutch/ 简介: Apache的子项目之一,属于Lucene项目下的子项目. Nutch是一个基于Lucene,类 ...
- 西南民大oj(两园交求面积)
西南民大oj:http://www.swunacm.com/acmhome/welcome.do?method=index 我的几何不可能那么可爱 时间限制(普通/Java) : 1000 MS/ 3 ...
- Python每隔一秒钟打印当地时间
import threading,time global t def sayHello(): print time.strftime('%Y-%m-%d %H:%M:%S',time.localtim ...
- eclipse failed to create the java virtual machine 问题图文解析(转)
clipse failed to create the java virtual machine 解决方法: 1.问题现象 2.java虚拟机初始化失败!寻找eclipse解压路径 3.寻找ecl ...
- Maven, Ivy, Grape, Gradle, Buildr, SBT, Leiningen, ant
Maven, Ivy, Grape, Gradle, Buildr, SBT, Leiningen, ant
- hdu2412(树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2412 题意:给定一棵关系树 , 从中选择一些点 , 使这些点均不存在亲子关系 , 最多能取多少个点 , ...
- nginx学习12 ngx_cycle_t 和 ngx_init_cycle
在nginx在启动过程,ngx_init_cycle这个函数最初始工作.变量的初始化存储在ngx_cycle_t这个结构体中,为了深入了解这个函数都做了那些初始化工作,就化时间研究了一下.并写下来以便 ...
- [POJ 3735] Training little cats (结构矩阵、矩阵高速功率)
Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9613 Accepted: 2 ...
- 【PLSQL】package包的使用
************************************************************************ ****原文:blog.csdn.net/clar ...
- hdu 4472 Count (递推)
Count Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...