奇葩!这么简单的广搜居然爆内存了,而且一直爆,一直爆,Orz

而且我也优化过了的啊,尼玛还是一直爆!

先把代码贴上睡觉去了,明天再来弄

 //#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
using namespace std; struct Point
{
int x, y, z;
int steps;
}start; int a, b, c, m;
int map[][][];
int dir[][] = {{,,}, {-,,}, {,,}, {,-,}, {,,}, {,,-}}; bool islegal(int x, int y, int z)
{
return (x>= && x<a && y>= && y<b && z>= && z<c && (map[x][y][z] == ));
} void BFS(void)
{
queue<Point> qu;
start.x = start.y = start.z = start.steps = ;
map[][][] = ;
qu.push(start);
while(!qu.empty())
{
Point fir = qu.front();
qu.pop();
if(fir.x==a- && fir.y==b- && fir.z==c-)
{printf("%d\n", fir.steps); return;}
if(fir.steps > m)
{printf("-1\n"); return;}
for(int i = ; i < ; ++i)
{
int xx = fir.x + dir[i][];
int yy = fir.y + dir[i][];
int zz = fir.z + dir[i][];
if(islegal(xx, yy, zz))
{
Point next;
next.x = xx, next.y = yy, next.z = zz;
next.steps = fir.steps + ;
map[zz][xx][yy] = ;
if(abs(xx-a+)+abs(yy-b+)+abs(zz-c+)+next.steps > m)
continue;
qu.push(next);
}
}
}
printf("-1\n");
} int main(void)
{
#ifdef LOCAL
freopen("1253in.txt", "r", stdin);
#endif int T;
scanf("%d", &T);
while(T--)
{
scanf("%d%d%d%d", &a, &b, &c, &m);
for(int i = ; i < a; ++i)
for(int j = ; j < b; ++j)
for(int k = ; k < c; ++k)
scanf("%d", &map[i][j][k]); BFS();
}
return ;
}

代码君

最终还是自己用数组模拟队列A过去了

一个优化:

因为题目要求在规定时间内走出迷宫,如果出口距离当前位置太远(即使在没有墙壁阻挡的情况下也走不到),那么就可以直接输出-1了

这个优化让900+MS的运行时间减少到了500+MS,还是比较给力的

 //#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = **+;
int head, tail;
struct Point
{
int x, y, z;
int steps;
}qu[maxn]; int a, b, c, m;
int map[][][];
int dir[][] = {{,,}, {-,,}, {,,}, {,-,}, {,,}, {,,-}}; bool islegal(int x, int y, int z)
{
return (x>= && x<a && y>= && y<b && z>= && z<c && (map[x][y][z] == ));
} void BFS(void)
{
qu[].x = qu[].y = qu[].z = qu[].steps = ;
head = , tail = ;
while(head < tail)
{
if(qu[head].steps > m)
{printf("-1\n"); return;}
if(qu[head].x==a- && qu[head].y==b- && qu[head].z==c-)
{printf("%d\n", qu[head].steps); return;}
for(int i = ; i < ; ++i)
{
int xx = qu[head].x + dir[i][];
int yy = qu[head].y + dir[i][];
int zz = qu[head].z + dir[i][];
if(islegal(xx, yy, zz))
{
map[xx][yy][zz] = ;
if(a+b+c--xx-yy-zz > m-qu[head].steps-) //优化
continue;
qu[tail].x = xx;
qu[tail].y = yy;
qu[tail].z = zz;
qu[tail++].steps = qu[head].steps + ;
}
}
++head;
}
printf("-1\n");
} int main(void)
{
#ifdef LOCAL
freopen("1253in.txt", "r", stdin);
#endif int T;
scanf("%d", &T);
while(T--)
{
scanf("%d%d%d%d", &a, &b, &c, &m);
for(int i = ; i < a; ++i)
for(int j = ; j < b; ++j)
for(int k = ; k < c; ++k)
scanf("%d", &map[i][j][k]); //map[0][0][0] = 1;
BFS();
}
return ;
}

代码君

HDU 1253 (简单三维广搜) 胜利大逃亡的更多相关文章

  1. HDU 1240 (简单三维广搜) Asteroids!

    给出一个三维的迷宫以及起点和终点,求能否到大终点,若果能输出最短步数 三维的问题无非就是变成了6个搜索方向 最后强调一下xyz的顺序,从输入数据来看,读入的顺序是map[z][x][y] 总之,这是很 ...

  2. hdu 1240(三维广搜)

    题意: 有一个n*n*n的三维空间. 给你起始坐标和终点坐标.要你从起点到终点,问最少需要多少步走出去.如果走不出去则输出"NO ROUTE". 空间中 'O' 表示这个点可以走, ...

  3. 三维bfs(HUD1253胜利大逃亡)

    #include <stdio.h>#include <string.h>int map[51][51][51];int v[51][51][51];int a,b,c,t11 ...

  4. hdu 1253:胜利大逃亡(基础广搜BFS)

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  5. HDU 1253:胜利大逃亡(简单三维BFS)

    pid=1253">胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/ ...

  6. hdu 1253 胜利大逃亡 (三维简单bfs+剪枝)

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  7. [ACM] hdu 1253 胜利大逃亡 (三维BFS)

    胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这但是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,能够被表示 ...

  8. hdu 1253 胜利大逃亡 (代码详解)解题报告

    胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示 ...

  9. HDU 1253 胜利大逃亡 NYOJ 523【BFS】

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

随机推荐

  1. Sqli-labs less 31

    Less-31 Less-31与上述两个例子的方式是一样的,我们直接看到less-31的sql语句: 所以payload为: http://127.0.0.1:8080/sqli-labs/Less- ...

  2. 分布式数据存储 - Zabbix监控MySQL性能

    Zabbix如何监控mysql性能,我们可以使用mysql自带的模板,可以监控如下内容:OPS(增删改查).mysql请求流量带宽,mysql响应流量带宽,最后会附上相应的监控图! 编写check_m ...

  3. HDU 4572 Bottles Arrangement(找规律,仔细读题)

    题目 //找规律,123321123321123321…发现这样排列恰好可以错开 // 其中注意题中数据范围: M是行,N是列,3 <= N < 2×M //则猜测:m,m,m-1,m-1 ...

  4. POJ 2017

    #include<iostream> #include<stdio.h> using namespace std; int main() { //freopen("t ...

  5. spring mvc绑定对象String转Date解决入参不能是Date的问题

    使用spring的mvc,直接将页面参数绑定到对象中,对象中有属性为Date时会报错,此时需要处理下. 同样的,其他的需要处理的类型也可以用这种方法. 在controller中加入代码 @InitBi ...

  6. 重载和覆盖的区别?(overload vs override)

    override与overload的区别? override 表示重写,overload 表示重载.override是子类和父类之间的关系,是垂直关系:overload是同一个类中方法之间的关系,是水 ...

  7. Axis2学习的第一天

    按照下面,分别建2个工程,一个client(客户端),一个server(服务端) 先实现服务端: 1.编写services.xml文件,该文件是放在aar文件里的\META-INF目录下的: < ...

  8. 内存就是RAM?

    内存不全是RAM,让我们看看当今的Intel计算机是如何连接各个组件的吧.下图展示了主板上的主要组件: 现代主板的示意图,北桥和南桥构成了芯片组. 当你看图时,请牢记一个至关重要的事实:CPU一点也不 ...

  9. AcmeAir安装AI探针--企业版

    通过脚本安装AI探针请点击通过脚本自动安装探针 一.安装企业版AI探针准备工作: 1. 准备好可用的docker版AcmeAir应用 2. 准备好可用的企业版AIServer 3. 下载好合适版本的J ...

  10. 如何在Java客户端调用RESTful服务

    在这个例子中,我们将看到如何使用java.net包实用工具,创建一个访问REST服务RESTful的客户端.当然这不是创建一个RESTful客户端最简单的方法,因为你必须自己读取服务器端的响应,以及J ...