HDU 1253 胜利大逃亡 题解

胜利大逃亡

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 44540    Accepted Submission(s): 15483

Problem Description
Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.

魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡,Ignatius每分钟能从一个坐标走到相邻的六个坐标中的其中一个.现在给你城堡的地图,请你计算出Ignatius能否在魔王回来前离开城堡(只要走到出口就算离开城堡,如果走到出口的时候魔王刚好回来也算逃亡成功),如果可以请输出需要多少分钟才能离开,如果不能则输出-1.

 


Input
输入数据的第一行是一个正整数K,表明测试数据的数量.每组测试数据的第一行是四个正整数A,B,C和T(1<=A,B,C<=50,1<=T<=1000),它们分别代表城堡的大小和魔王回来的时间.然后是A块输入数据(先是第0块,然后是第1块,第2块......),每块输入数据有B行,每行有C个正整数,代表迷宫的布局,其中0代表路,1代表墙.(如果对输入描述不清楚,可以参考Sample Input中的迷宫描述,它表示的就是上图中的迷宫)

特别注意:本题的测试数据非常大,请使用scanf输入,我不能保证使用cin能不超时.在本OJ上请使用Visual C++提交.
 


Output
对于每组测试数据,如果Ignatius能够在魔王回来前离开城堡,那么请输出他最少需要多少分钟,否则输出-1.
 


Sample Input
1 3 3 4 20 0 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 0 0 0 0 1 1 0 0 1 1 0
 


Sample Output
11
 


Author
Ignatius.L
 


Recommend
Ignatius.L   |   We have carefully selected several similar problems for you:  1072 1240 1016 1010 1175 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
同样这是一道很典型的BFS的题目
只是由二维变成了三维
方向变为六个自由度
下面直接上我完整注释
谁都能看懂的代码
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 1 #include<iostream>
 2 #include<string>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<fstream>
 6 #include<iosfwd>
 7 #include<sstream>
 8 #include<fstream>
 9 #include<cwchar>
10 #include<iomanip>
11 #include<ostream>
12 #include<vector>
13 #include<cstdlib>
14 #include<queue>
15 #include<set>
16 #include<ctime>
17 #include<algorithm>
18 #include<complex>
19 #include<cmath>
20 #include<valarray>
21 #include<bitset>
22 #include<iterator>
23 #define ll long long
24 using namespace std;
25 const double clf=1e-8;
26 //const double e=2.718281828;
27 const double PI=3.141592653589793;
28 const int MMAX=2147483647;
29 //priority_queue<int>p;
30 //priority_queue<int,vector<int>,greater<int> >pq;]
31 int times,a,b,c,k;
32 struct node
33 {
34     int x,y,z,step;
35 };
36 int vis[51][51][51];
37 int dir[6][3]={{0,0,1},{0,0,-1},{0,-1,0},{0,1,0},{1,0,0},{-1,0,0}};//六个自由度的矢量 
38 int bfs(int x,int y,int z,int x1,int x2,int x3)
39 {
40     int i;
41     queue<node> q;
42     q.push(node{x,y,z,0});
43     vis[x][y][z]=1; 
44     while(!q.empty())
45     {
46         node t=q.front();//读最开始的那个元素
47         q.pop();//取出来  
48         if(t.step>times)
49             return -1;//到不了返回-1 
50         if(t.x==a-1&&t.y==b-1&&t.z==c-1&&t.step<=times)
51             return t.step;//到了直接返回步数 
52         for(i=0;i<6;i++)//6个维度 
53         {
54             int dx=t.x+dir[i][0];//x方向动 
55             int dy=t.y+dir[i][1];//y方向动 
56             int dz=t.z+dir[i][2];//z方向动 
57             if(dx>=0&&dy>=0&&dz>=0&&dx<=x1&&dy<=x2&&dz<=x3&&!vis[dx][dy][dz])
58             {
59                 q.push(node{dx,dy,dz,t.step+1});//搜索到的放进去 
60                 vis[dx][dy][dz]=1;
61             }
62         }
63     }
64     return -1;
65 }
66 int main()
67 {
68     scanf("%d",&k);
69     while(k--)
70     {
71         scanf("%d%d%d%d",&a,&b,&c,&times);
72         for(int i=0;i<a;i++)
73         {
74             for(int j=0;j<b;j++)
75             {
76                 for(int k=0;k<c;k++)
77                 {
78                     scanf("%d",&vis[i][j][k]);
79                 }
80             }
81         }
82         if(a==1&&b==1&&c==1)
83             printf("0\n");
84         else
85         {
86             int ans=bfs(0,0,0,a-1,b-1,c-1);//0,0,0开始a-1,b-1,c-1结尾 
87                 printf("%d\n",ans);
88         }
89     }
90     return 0;
91 }

Notes:模板题

2018-11-16  00:32:47  Author:LanceYu

转载于:https://www.cnblogs.com/lanceyu/p/9967048.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lstm需要优化的参数_使用PyTorch手写代码从头构建LSTM,更深入的理解其工作原理...

这是一个造轮子的过程&#xff0c;但是从头构建LSTM能够使我们对体系结构进行更加了解&#xff0c;并将我们的研究带入下一个层次。LSTM单元是递归神经网络深度学习研究领域中最有趣的结构之一&#xff1a;它不仅使模型能够从长序列中学习&#xff0c;而且还为长、短期记忆创建…

有哪些漂亮的中国风 LOGO 设计?

提到中国风的logo&#xff0c;我觉得首先登场的应该是北京故宫博物院的logo&#xff0c;铛&#xff01;故宫博物院的logo&#xff0c;从颜色&#xff0c;到外形&#xff0c;到元素&#xff0c;无一例外&#xff0c;充满了中国风的味道&#xff0c;可谓是中国风中的典型。同一风…

python3常用模块_Python3 常用模块

一、time与datetime模块 在Python中&#xff0c;通常有这几种方式来表示时间&#xff1a; 时间戳(timestamp)&#xff1a;通常来说&#xff0c;时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”&#xff0c;返回的是float类型。 格式…

地方政府不愿房价下跌 救市或化解房地产调控

地方政府不愿房价下跌 "救市"或化解房地产调控 2008年05月09日 07:29:38  来源&#xff1a;上海证券报 漫画 刘道伟 由于房地产业与地方政府利益攸关&#xff0c;地方政府最不愿意看到房价下跌。中央房地产调控政策刚刚导致部分城市的房价步入调整&#xff0c;一些…

App移动端性能工具调研

使用GT的差异化场景平台描述release版本development版本Android在Android平台上&#xff0c;如果希望使用GT的高级功能&#xff0c;如“插桩”等&#xff0c;就必须将GT的SDK嵌入到被调测的应用的工程里&#xff0c;再配合安装好的GT使用。支持AndroidiOS在iOS平台上&#xff0…

UITabBar Contoller

。UITabBar中的UIViewController获得控制权&#xff1a;在TabBar文件中添加&#xff1a;IBOutlet UITabBar *myTabBar; //在xib中连接tabBar&#xff1b;(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:      (UIViewControlle…

python3.5安装pip_win10上python3.5.2第三方库安装(运用pip)

1 首先在python官网下载并安装python。我这儿用的是python3.5.2&#xff0c;其自带了pip。如果你选择的版本没有自带pip&#xff0c;那么请查找其他的安装教程。 2 python安装好以后&#xff0c;我在其自带的命令提示符窗口中输入了pip&#xff0c;结果尴尬了&#xff0c;提示我…

语法上的小trick

语法上的小trick 构造函数 虽然不写构造函数也是可以的&#xff0c;但是可能会开翻车&#xff0c;所以还是写上吧。&#xff1a; 提供三种写法&#xff1a; ​ 使用的时候只用&#xff1a; 注意&#xff0c;这里的A[i]gg(3,3,3)的“gg”不能打括号&#xff0c;否则就是强制转换…

Ubuntu18.04如何让桌面软件默认root权限运行?

什么是gksu? 什么是gksu:Linxu中的gksu是系统中的su/sudo工具,如果安装了gksu,在终端中键入gksu会弹出一个对话框. 安装gksu: 在Ubuntu之前的版本中是继承gksu工具的,但是在Ubutu18.04中并没有集成, 在Elementary OS中连gksu的APT源都没有. Ubuntu18.04 安装和使用gksu: seven…

win10诊断启动后联网_小技巧:win10网络共享文件夹出现错误无法访问如何解决?...

win10系统共享文件夹时在资源管理器中的网络里能够看到所共享的文件夹&#xff0c;但在打开文件夹时却出现 Windows无法访问 Desktop-r8ceh55新建文件夹 请检查名称的拼写。否则&#xff0c;网络可能有问题。要尝试识别并解决网络问题&#xff0c;请单击“诊断”的错误提示&…

两段关于统计日期的sql语句

统计月份&#xff1a;selectleft(convert(char(10),[Article_TimeDate],102),7) as月份, count(*) as数量from[hdsource].[dbo].[article]groupbyleft(convert(char(10),[Article_TimeDate],102),7)orderby1统计年份&#xff1a; selectleft(convert(char(10),[Article_TimeDat…

sklearn 安装_sklearn-classification_report

原型sklearn.metrics.classification_report(y_true, y_pred, labelsNone, target_namesNone, sample_weightNone, digits2)参数y_true&#xff1a;1维数组或标签指示数组/离散矩阵&#xff0c;样本实际类别值列表y_pred&#xff1a;1维数组或标签指示数组/离散矩阵&#xff0c…

Python标准库之csv(1)

1.Python处理csv文件之csv.writer() import csvdef csv_write(path,data):with open(path,w,encodingutf-8,newline) as f:writer csv.writer(f,dialectexcel)for row in data:writer.writerow(row)return True 调用上面的函数 data [[Name,Height],[Keys,176cm],[HongPing,1…

我用代码来给你们分析一个赚钱的技巧

2019独角兽企业重金招聘Python工程师标准>>> 赚钱是个俗气的话题&#xff0c;但又是人人都绕不开的事情。我今天来“科学”地触碰下这个话题。 谈赚钱&#xff0c;就会谈到理财、投资&#xff0c;谈到炒股。有这样一个笑话&#xff1a; 问&#xff1a;如何成为百万富…

idea中自动deployment的步骤

转载于:https://www.cnblogs.com/littlehb/p/11322666.html

python怎么编辑文件_如何使用python中的方法对文件进行修改文件名

在使用python语言中的方法操作文件时&#xff0c;打开方法可以直接使用open&#xff0c;但是对文件重命名需要调用os模块中的方法&#xff0c;删除文件也是工具/原料 python 编辑器 截图工具 台式机 方法/步骤 1 进入到python安装文件目录&#xff0c;新建txt文件kou.txt2 打开…

球迷必备Euro Cup Mobile 2008 !-dopod touch diamond试用之欧洲杯

欧洲杯从6月8日开始&#xff0c;到现在已经进行了半个多月了。到今天为止已经进入到了尾声&#xff0c;也到了激战正酣的时刻&#xff01;(相信在国足出线无望后大伙的目光都聚集到了欧洲杯上) 但是平时上班忙&#xff0c;晚上也没法熬夜看球&#xff0c;哥们心理着急呀。白天上…

python中意外缩进是什么意思_如何处理python中的“意外缩进”?

慕工程0101907 Python在行的开头使用间距来确定代码块何时开始和结束。你可以得到的错误是&#xff1a;意外的缩进。这行代码在开始时比前一行有更多空格&#xff0c;但前一行不是子块的开头&#xff08;例如if / while / for语句&#xff09;。块中的所有代码行必须以完全相同…

设计模式学习笔记九:原型模式(Prototype Pattern)

1&#xff0e;概述 意图&#xff1a;我们将已经存在的对象作为原型&#xff0c;用户可以通过复制这些原型创建新的对象。 使用场合&#xff1a;当一个系统应该独立于产品的创建、构造和表示时&#xff0c;可以使用原型模式。在原型模式中&#xff0c;产品的创建和初始化…

Centos7上安装docker

步骤&#xff1a;1、Docker 要求 CentOS 系统的内核版本高于 3.10 &#xff0c;查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。通过 uname -r 命令查看你当前的内核版本2、使用 root 权限登录 Centos。确保 yum 包更新到最新。 &#xff08;这个可能需要几分钟的…