题目大意:

从三维空间的(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. bzoj 1753: [Usaco2005 qua]Who's in the Middle【排序】

    --这可能是早年Pascal盛行的时候考排序的吧居然还是Glod-- #include<iostream> #include<cstdio> #include<algor ...

  2. [App Store Connect帮助]六、测试 Beta 版本(3.1)管理测试员:添加内部测试员

    您可以添加至多 25 个内部测试员(您的 App Store Connect 用户)使用“TestFlight Beta 版测试”来测试您的 App.在您上传了至少一个构建版本之后,才可添加测试员. ...

  3. AutoCAD C# 利用反射导出所注册的命令

    主函数导出某一程序集AutoCAD 注册命令 /// <summary> ///提取所有的命令 /// </summary> /// <param name=" ...

  4. [USACO09NOV]灯Lights

    题目描述 Bessie and the cows were playing games in the barn, but the power was reset and the lights were ...

  5. UML中类之间的关系

    UML中类之间的关系分为以下几种:依赖.关联.泛化.聚合.组合. 依赖是指一个类使用了另一个类,它是一种使用关系,描述了一个事物的规格说明的变化可能会影响到使用它的另一个事物(反之不一定).最常见的依 ...

  6. [译]HTTP POSTing

    HTTP POSTing We get many questions regarding how to issue HTTP POSTs with libcurl the proper way. Th ...

  7. TFS修改了工作区

    计算机修改名字后,更换了TFS工作区,但原工作区的有些文件忘记签入: 解决方案: 删除原工作区即可,实现:到TFS工作区 - “管理工作区”,选中“显示远程工作区”,找到原工作区,删除即可.

  8. Xml学习笔记(2)

    不同的xml文档构可能要用到不同的方法进行解析这里用到的是例如<student name="张三" id="1" sex="男"/&g ...

  9. Kerberos 简介——教你做个好人

    文章导读: 对称加密 非对称加密 数字证书 Kerberos认证流程 Hadoop生态利用Kerberos认证机制来识别可靠的服务和节点,保障Hadoop集群的安全,那么Kerberos到底是什么?为 ...

  10. ES6十大常用特性

    .   Default Parameters(默认参数) in ES6 2.    Arrow Functions (箭头函数)in ES6 3.    Block-Scoped Constructs ...