题目大意:

从三维空间的(0,0,0)出发到(a-1,b-1,c-1),每移动一个都要时间加一,计算最短时间

根据六个方向,开个bfs,像spfa那样计算最短路径就行了,但是要1200多ms,也不知道有没有更好的方法

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
using namespace std;
int dp[][][] , a , b , c;
bool wall[][][] , vis[][][];
int dir[][] = {{,,} , {,,} , {,,} , {,,-} , {,-,} , {-,,}};
struct Node{
int x , y , z;
Node(int x = , int y = , int z = ):x(x),y(y),z(z){}
};
queue<Node> q; bool ok(int x , int y , int z)
{
if(x< || x>=a) return false;
if(y< || y>=b) return false;
if(z< || z>=c) return false;
if(wall[x][y][z]) return false;
return true;
} int main()
{
// freopen("a.in" , "r" , stdin);
int T , t , w;
scanf("%d" , &T);
while(T--){
scanf("%d%d%d%d" , &a , &b , &c , &t);
for(int i = ; i<a ; i++)
for(int j = ; j<b ; j++)
for(int k = ; k<c ; k++){
scanf("%d" , &w);
if(w) wall[i][j][k] = true;
else wall[i][j][k] = false;
}
memset(dp , 0x3f , sizeof(dp));
memset(vis , , sizeof(vis));
dp[][][] = ;
q.push(Node(,,));
while(!q.empty()){
Node u = q.front();
q.pop();
vis[u.x][u.y][u.z] = false;
for(int i = ; i< ; i++){
Node v;
v.x = u.x+dir[i][];
v.y = u.y+dir[i][];
v.z = u.z+dir[i][];
if(ok(v.x,v.y,v.z)){
if(dp[v.x][v.y][v.z] > dp[u.x][u.y][u.z] + ){
dp[v.x][v.y][v.z] = dp[u.x][u.y][u.z] + ;
if(!vis[v.x][v.y][v.z]){
q.push(v);
vis[v.x][v.y][v.z] = true;
}
}
}
}
} if(dp[a-][b-][c-] > t) puts("-1");
else printf("%d\n" , dp[a-][b-][c-]);
}
return ;
}

HDU 1253 三维数组的图上找最短路的更多相关文章

  1. [hdu5348]图上找环,删环

    http://acm.hdu.edu.cn/showproblem.php?pid=5348 题意:给一个无向图,现在要将其变成有向图,使得每一个顶点的|出度-入度|<=1 思路:分为两步,(1 ...

  2. HDU 2147 kiki's game(博弈图上找规律)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2147 题目大意:给你一个n*m的棋盘,初始位置为(1,m),两人轮流操作,每次只能向下,左,左下这三个 ...

  3. uva 116 Unidirectional TSP(动态规划,多段图上的最短路)

    这道题目并不是很难理解,题目大意就是求从第一列到最后一列的一个字典序最小的最短路,要求不仅输出最短路长度,还要输出字典序最小的路径. 这道题可以利用动态规划求解.状态定义为: cost[i][j] = ...

  4. hdu 5876 Sparse Graph 无权图bfs求最短路

    Sparse Graph Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) P ...

  5. 三维数组——与 宝玉QQ群讨论交流之二

    宝玉 12:27:35 这几天看了大部分大家交的作业,发现一个主要问题还是卡在对三维数组的理解上,之前把三维数组类比成三维空间可能会造成误导 宝玉 12:27:45 其实鞠老师解释的很好: 三维数组 ...

  6. hdu 5001 概率DP 图上的DP

    http://acm.hdu.edu.cn/showproblem.php?pid=5001 当时一看是图上的就跪了 不敢写,也没退出来DP方程 感觉区域赛的题  一则有一个点难以想到 二则就是编码有 ...

  7. python 三维数组找最小值

    #声明三维数组 num=[[[,,],[,,],[,,]], \ [[,,],[,,],[,,]]] value=num[][][]#设置main为num数组的第一个元素 ): ): ): if(va ...

  8. HDU 3249 Test for job (有向无环图上的最长路,DP)

     解题思路: 求有向无环图上的最长路.简单的动态规划 #include <iostream> #include <cstring> #include <cstdlib ...

  9. 【第41套测试题NOIP2007】【排序】【DP】【高精度】【树】【图上路径】

    先说点题外话,这两天的入学考试,炸了……语文有史以来最差,数学有史以来最差……还有4科,估计全炸……悲痛的心情,来调程序.这套题是8.31考的,从昨天晚上开始改的,因为第三题迟迟不想写,才拖到了现在. ...

随机推荐

  1. Linux环境下卸载、安装及配置MySQL5.1

    Linux环境下卸载原有MySQL5.1数据库,并重新安装MySQL数据库的示例记录. 一.卸载MySQL 查看主机中是否安装了MySQL数据库: [root@RD-viPORTAL- ~]# rpm ...

  2. 391 Perfect Rectangle 完美矩形

    有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域.每个矩形用左下角的点和右上角的点的坐标来表示.例如, 一个单位正方形可以表示为 [1,1,2,2]. ( ...

  3. LN : leetcode 231 Power of Two

    lc 231 Power of Two 231 Power of Two Given an integer, write a function to determine if it is a powe ...

  4. ajax怎么理解?

    Ajix是创建交互式网页的前端网页开发技术,不是一种语言,ajax是基于http来传输数据的,他是利用浏览器提供操作http的接口(XMLHttpRequest或者activeXobject),来操作 ...

  5. express模块安装使用命令配置

    之前的博客nodejs安装和配置好路径之后就可以安装express了: 随便打开个文件夹右键选择,git bash here 命令行里输入[npm install express -g] -g是全局安 ...

  6. LR接口测试---webservices

    //================================================================================== /* //事务开始 lr_st ...

  7. self和super的区别

    (1)self调用自己方法,super调用父类方法 (2)self是类,super是预编译指令 (3)[self class]和[super class]输出是一样的 ①当使用 self 调用方法时, ...

  8. Memcached通信协议

    英文水平很烂,做梦都想着能把英语学习,可以使用一口流利的英文和洋鬼子交流,顺便忽悠下自己的同胞.没有地方学习英语,看还可以,网上有很多关于计算机的英文文献,写还行,说就完全不可能了.在以后的工作中慢慢 ...

  9. JDBC更新10W级以上数据性能优化

    随笔缘由: 系统完成到一定程度,少不了要往数据库中添加大量数据进行性能测试. 我用程序做数据10W条,使用jdbc批更新的API,发现每次只能插入2W多条记录. 一番小小研究,觉得总结一下可能有些意义 ...

  10. jQuery之基本选择器Practice

    一.在输入框中输入数字,点击按钮,实现对应事件的功能. html代码: <input id="txt1" type="text" value=" ...