地下迷宫(bfs输出路径)



题解:开一个pre数组用编号代替当前位置,编号用结构题另存,其实也可以i*m+j来代替,我写的有点麻烦了;
代码:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
#pragma(1)
typedef struct Node{
int x, y;
int t;
int sz;
friend bool operator < (Node a, Node b){
return a.t > b.t;
}
}Node; Node node[];
priority_queue<Node>Q;
int vis[][];
int mp[][];
int pre[];
int disx[] = {,,,-};
int disy[] = {,-,,};
int mv(int x, int y){
if(x == ){
if(y == ){
return ;
}
else if(y == -){
return ;
}
}else if(x == ){
if(y == )
return ;
}else if(x == -){
if(y == )
return ;
}
}
void print(int sz){
if(sz == )return;
print(pre[sz]);
printf(",[%d,%d]", node[sz].x, node[sz].y);
}
void bfs(int n, int m, int p){
Node a,b;
a.x = , a.y = , a.t = p, a.sz = ;
while(!Q.empty()){
Q.pop();
}
Q.push(a);
memset(vis, , sizeof(vis));
memset(pre, , sizeof(pre));
memset(node, , sizeof(node));
vis[][] = ;
node[] = {, , , };
int sz = ;
while(!Q.empty()){
a = Q.top();
Q.pop();
for(int i = ; i < ; i ++){
b.x = a.x + disx[i];
b.y = a.y + disy[i];
b.t = a.t - mv(disx[i], disy[i]);
b.sz = ++sz;
node[sz] = {b.x, b.y, b.t, b.sz};
pre[sz] = a.sz;
if(b.x < || b.y < || b.x >= n || b.y >= m)continue;
if(vis[b.x][b.y])continue;
if(b.t < )continue;
if(mp[b.x][b.y] == )continue;
if(b.x == && b.y == m - ){
printf("[%d,%d]",,);
print(sz);
puts("");
return;
}
vis[b.x][b.y] = ;
Q.push(b);
}
}
puts("Can not escape!");
return;
}
int main(){
int n, m, q;
while(~scanf("%d%d%d", &n, &m, &q)){
memset(mp, , sizeof(mp));
for(int i = ; i < n; i++){
for(int j = ; j < m; j++){
scanf("%d", &mp[i][j]);
}
}
bfs(n, m, q);
}
return ;
}
地下迷宫(bfs输出路径)的更多相关文章
- hdu 1026(BFS+输出路径) 我要和怪兽决斗
http://acm.hdu.edu.cn/showproblem.php?pid=1026 模拟一个人走迷宫,起点在(0,0)位置,遇到怪兽要和他决斗,决斗时间为那个格子的数字,就是走一个格子花费时 ...
- 蓝桥T291(BFS + 输出路径)
http://lx.lanqiao.org/problem.page?gpid=T291 学霸的迷宫 时间限制:1.0s 内存限制:256.0MB 问题描述 学霸抢走了大家的作业,班 ...
- poj 3414 Pots(bfs+输出路径)
Description You are given two pots, having the volume of A and B liters respectively. The following ...
- bfs输出路径 && 最短路(迪杰斯特拉)输出路径
问题描述 解决方法 1.像第一个问题那就是最短路问题(我代码采用迪杰斯特拉算法)实现 2.换乘次数最少,那就用bfs广搜来寻找答案.但是我的代码不能保证这个最少换乘是最短路程 代码 1 #includ ...
- PTA 7-33 地下迷宫探索(深搜输出路径)
地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...
- 迷宫问题---poj3984(bfs,输出路径问题)
题目链接 主要就是输出路径问题: pre[x][y]表示到达(x,y)是由点(pre[x][y].x, pre[x][y].y)而来: #include<stdio.h> #includ ...
- POJ 3414 Pot (输出路径)【BFS】
<题目链接> 题目大意: 有两个容量的空杯子,能够对这两个空杯子进行三种操作: 分别是fill(a),装满a杯子: drop(a),倒空a杯子: pour(a,b),将a杯子中的水倒入b杯 ...
- Pots--poj(bfs,输出路径)
http://poj.org/problem?id=3414 题意: 给你两个容量为a,b的杯子:有3个操作: 1:FILL(i):把第i个杯子从水库中装满: 2:DROP(i):把第i个杯子清空: ...
- POJ.3894 迷宫问题 (BFS+记录路径)
POJ.3894 迷宫问题 (BFS+记录路径) 题意分析 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, ...
随机推荐
- flash与字符串:字符串与属性
有时候,我们想通过设置一个DisplayObject 类是属性值,只是需要通过点来引用即可.有时候,通过字符串也可以引用显示对象里面的属性值. 下面举个例子 . ...
- [RxJS] Completing a Stream with TakeWhile
Subscribe can take three params: subscribe( (x)=> console.log(x), err=> console.log(err), ()=& ...
- 用消息在Win32控制台程序多线程间进行通讯
#include <stdio.h> #include <windows.h> //#include <iostream> //#include <pro ...
- CentOS6.6修改主机名和网络信息
1.修改主机名称 [root@centos ~]# vim /etc/sysconfig/network #打开文件,修改以下内容并保存 NETWORKING=yes #使用网络HOSTNAME=ce ...
- (转)Web.config配置文件详解(新手必看)
花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <? ...
- (转)第一天 XHTML CSS基础知识 文章出处:标准之路(http://www.aa25.cn/div_css/902.shtml)
欢迎大家学习<十天学会web标准>,也就是我们常说的DIV+CSS.不过这里的DIV+CSS是一种错误的叫法,建议大家还是称之为web标准. 学习本系列教程需有一定html和css基础,也 ...
- GDI+(Graphics Device Interface)
1创建画布(创建Graphics对象) Bitmap bitmap = new Bitmap(80,80); Graphics g=Graphics.FromImage(bitmap); 2创建Pen ...
- .net中div置于顶层+iframe
aspx代码: <td> <asp:Button ID="BtnDownPPT" runat="server" OnClientClick= ...
- web-打印
项目前景 由于之前的打印是客户端程序,也就是winform做的,现在需要改版成网页版,其他功能都能够很好的实现,就是在打印上遇到一些难点.由于第一次做打印功能,刚开始照搬winform中调用word文 ...
- 解决mdi窗体闪烁的问题
/// 解决mdi窗体闪烁的问题 /// </summary> protected override CreateParams CreateParams { get { CreatePar ...