称号:

网络格迷宫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,迷宫的更多相关文章

  1. QDUOJ 生化危机 邻接表存图+BFS

    生化危机 发布时间: 2015年10月10日 18:05   时间限制: 1000ms   内存限制: 256M 描述 X博士想造福人类, 研发一种可以再生肢体的药物, 可是很不幸......研究失败 ...

  2. BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS

    BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS Description Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N ...

  3. (图 BFS)走迷宫

    题目: 给一个迷宫,求出从起点到终点的路径.迷宫 src.txt 文件内容如下,第一行是迷宫的行列数,后面行是迷宫,1表示可行走,0表示不可以通过,起点是最左上角,终点是最右下角: 解析: 其实就是图 ...

  4. HDU 4444 Walk (离散化建图+BFS+记忆化搜索) 绝对经典

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4444 题意:给你一些n个矩形,给你一个起点,一个终点,要你求从起点到终点最少需要转多少个弯 题解:因为 ...

  5. 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 ...

  6. HDU 4444:Walk(思维建图+BFS)***

    http://acm.hdu.edu.cn/showproblem.php?pid=4444 题意:给出一个起点一个终点,给出n个矩形的两个对立顶点,问最少需要拐多少次弯可以从起点到达终点,如果不能输 ...

  7. 算法系列之图--BFS

    广度优先搜索以源结点s为出发点,算法始终将已发现和未发现结点之间的边界,沿其广度方向向外扩展.也即算法需要在发现所有距离源结点s为k的所有结点之后才会去发现距离源结点距离为k+1的其他结点. talk ...

  8. hdu 4444 Walk (离散化+建图+bfs+三维判重 好题)

    Walk Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

  9. 【BZOJ3417】Poi2013 Tales of seafaring 分层图BFS

    [BZOJ3417]Poi2013 Tales of seafaring Description 一个n点m边无向图,边权均为1,有k个询问 每次询问给出(s,t,d),要求回答是否存在一条从s到t的 ...

随机推荐

  1. 使用RouteDebugger对MVC路由进行调试

    在Asp.Net MVC程序中,路由是MVC程序的入口,每一个Http请求都要经过路由计算,然后匹配到相应的Controller和Action.通常我们的路由都会注册在Global.asax.cs文件 ...

  2. iOS ,呼叫捕获抛出勉未知方法的障碍

    iOS 捕获未知方法的调用,避勉抛出异常 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 ...

  3. SE 2014 年4月21日(一)

    如图配置 网络中存在四个自治系统,设备之间要求建立BGP对等体关系,发布BGP路由,使得全网BGP路由相互通讯. 要求 1. 由于AS 200中的路由信息频繁抖动,所以AS 100 和 AS 300 ...

  4. 用java代码实现环圈报数

    环圈报数就是围一圈人,每一次数数数到三的人自动出圈,再接着数, 用数据结构的思想实现 public class Count3Quit {     public static void main(Str ...

  5. WPF界面设计技巧(10)-样式的继承

    原文:WPF界面设计技巧(10)-样式的继承 PS:现在我的MailMail完工了,进入内测阶段了,终于可以腾出手来写写教程了哈,关于MailMail的介绍及内测程序索取:http://www.cnb ...

  6. linux--关于shell的介绍

    下面是最近学习shell的一些知识点总结***博客园-邦邦酱好*** 1.什么是shell(1)Shell将我们输入的指令与Kernel沟通,好让Kernel可以控刢硬件来正确无误地工作.(2)我们总 ...

  7. C#索引器的应用:自已写一个表格

    C#中索引器,在一个类中有很多的同一类型成员的时候,比较适用索引器. 环境:我们假设有一个动物园,里边有很多动物. 用法: 1.先定义一个类,这是成员的类型.在这里就是要定义一个Animal类: pu ...

  8. 【超有用】图解--怎样使用本地的dtd文件映射

    曾经一直非常苦恼,假设电脑上不了网,就比較麻烦了.自己在配置HIbernate的属性的时候.不知道属性名有没有写错.. 如今和大家分享一下,毕竟自己痛苦过了,大家不要和我一样痛苦.

  9. 【filezilla】 ubuntu下安装filezilla

    sudo apt-get install filezilla '安装filezilla3.6.02 filezilla '执行filezilla

  10. java中final的意义

    1.如果一个数据既是static又是final,那么它会拥有一块无法改变的存储空间. 2.final data: 当final用于基本数据类型时,final让其值(value)保持不变,但是当用于ob ...