哈利被困在了一个魔法花园里。魔法花园是一个 N*M 的矩形,在其中有着许多植物,

这些植物会在时刻 K 的倍数消失。 哈利每单位时间都会选择上、下、左、右四

个方向的其中一个进行移动。

  1. #include<iostream>
  2. using namespace std;
  3. int n,m,k;
  4. #define max 100
  5. char mmap[max][max];
  6. int mmin;
  7. #define MIN(a,b) ((a)<(b)?(a):(b));
  8. int x1,x2,y1,y2;
  9. int mmde[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
  10. int visited[max][max];
  11. int step;
  12. int sum;
  13. void dfs(int x,int y){
  14.  
  15. int i;
  16. int mx,my;
  17. if(mmap[x][y]=='3'){
  18. mmin=MIN(step,mmin);
  19.  
  20. }
  21. else
  22. // if(mmap[x][y]!='1'||(step%k==0&&mmap[x][y]=='1'))
  23. {
  24. int no=0;
  25. for(i=0;i<4;i++){
  26. mx=x+mmde[i][0];
  27. my=y+mmde[i][1];
  28. // cout<<"pre:"<<endl<<" x: "<<mx<<" y: "<<my<<" step: "<<step<<endl;
  29. if(
  30. (
  31. (mmap[mx][my]!='1'&&!visited[mx][my]&&mx>=1&&mx<=n&&my>=1&&my<=m)
  32. ||
  33. (
  34. (step+1)%k==0&&mmap[mx][my]=='1'
  35. )
  36. )
  37. &&
  38. (
  39. abs(mx-x2)+abs(my-y2)+step<mmin
  40. )
  41. ){
  42. step++;
  43. sum++;
  44. visited[mx][my]=1;
  45. dfs(mx,my);
  46. visited[mx][my]=0;
  47. step--;
  48.  
  49. }
  50. else no++;
  51. /*
  52. else if(abs(mx-x2)+abs(my-y2)+sum>mmin){
  53. cout<<"too long"<<endl;
  54.  
  55. }
  56. else
  57. {
  58. cout<<"weizhishoxian"<<endl;
  59.  
  60. } */
  61. }
  62. //重复走 样例3
  63. if(no==4){
  64. for(i=0;i<4;i++){
  65. mx=x+mmde[i][0];
  66. my=y+mmde[i][1];
  67. if(mmap[mx][my]=='0'||mmap[mx][my]=='2'){
  68. // cout<<"visited---mmap["<<mx<<"]["<<my<<"] to 0"<<endl;
  69. visited[mx][my]=0;}
  70.  
  71. }
  72. for(i=0;i<4;i++){
  73. mx=x+mmde[i][0];
  74. my=y+mmde[i][1];
  75. if(
  76. (
  77. (mmap[mx][my]!='1'&&!visited[mx][my]&&mx>=1&&mx<=n&&my>=1&&my<=m)
  78. ||
  79. (
  80. (step+1)%k==0&&mmap[mx][my]=='1'
  81. )
  82. )
  83. &&
  84. (
  85. abs(mx-x2)+abs(my-y2)+step<mmin
  86. )
  87. ){
  88. step++;
  89. sum++;
  90. visited[mx][my]=1;
  91. dfs(mx,my);
  92. visited[mx][my]=0;
  93. step--;
  94.  
  95. }
  96. }
  97. }
  98.  
  99. }
  100. }
  101. int main(){
  102. //scanf("%d%d%d",&n,&m,&k);
  103. int icase;
  104. cin>>icase;
  105. while(icase--){
  106. cin>>n>>m>>k;
  107. int i,j;
  108. memset(visited,0,sizeof(visited));
  109. mmin=1000000;
  110. for(i=1;i<=n;i++){
  111. for(j=1;j<=m;j++){
  112. cin>>mmap[i][j];
  113. if(mmap[i][j]=='2')
  114. {x1=i;y1=j;}
  115. else if(mmap[i][j]=='3')
  116. {x2=i;y2=j;}
  117. }
  118. }
  119. visited[x1][y1]=1;
  120. // cout<<"now:x1:"<<x1<<" y1:"<<y1<<endl;
  121. step=0;
  122. sum=0;
  123. dfs(x1,y1);
  124. if(mmin==1000000)cout<<"Mobiliarbus"<<endl;
  125. else cout<<mmin<<endl;
  126. // cout<<"sum:"<<sum<<endl;
  127. }
  128. }
  129. /*
  130. 100
  131. 6 6 2
  132. 000200
  133. 000100
  134. 010000
  135. 000100
  136. 000100
  137. 001310
  138. 7
  139. 6 6 2
  140. 000300
  141. 000100
  142. 010000
  143. 000100
  144. 000100
  145. 001210
  146. Mobiliarbus
  147. 3 5 3
  148. 00102
  149. 00011
  150. 00300
  151. 6
  152. 3 5 3
  153. 00002
  154. 00111
  155. 00300
  156. 4
  157. &&(abs(mx-x2)+abs(my-y2)+step<=mmin))剪枝
  158. */

版权声明:本文为博主原创文章,未经博主允许不得转载。

DFS--障碍在指定时间会消失的更多相关文章

  1. 可设置指定时间自己主动消失的 MessageBox实现

    本文主要是讲怎样实现可设置指定时间自己主动消失的 MessageBox提示框ShowMessageBoxTimeout实现: 在开发client应用程序的时候.经经常使用得WinForm中Messag ...

  2. 【转】Expire Google Drive Files 让Google Docs云盘共享连接在指定时间后自动失效

    最近在清理Google Docs中之前共享过的文件链接,发现Google Docs多人协作共享过的链接会一直存在,在实际操作中较不灵活.正好订阅的RSS推送了Pseric写的这篇文章 - Expire ...

  3. 在指定时间干,必须干(kbmmw 中的事件调度)

    从去年开始,kbmmw 慢慢增加内涵,除了完善各种服务外,陆续增加和扩展了作为一个中间件必须有的功能, 例如,权限管理.日志系统.调度系统.内存调试等功能. 今天给大家介绍一下kbmmw 的调度事件, ...

  4. SQL Server 获取最后一天(指定时间的月最后一天日期)

    /* author OceanHo @ 2015-10-23 10:14:21 获取指定时间字符串指定日期的月最后一天日期 */ IF OBJECT_ID('get_LastDayDate') IS ...

  5. C#使用Timer.Interval指定时间间隔与指定时间执行事件

    C#中,Timer是一个定时器,它可以按照指定的时间间隔或者指定的时间执行一个事件. 指定时间间隔是指按特定的时间间隔,如每1分钟.每10分钟.每1个小时等执行指定事件: 指定时间是指每小时的第30分 ...

  6. Android判断当前系统时间是否在指定时间的范围内(免消息打扰)

    /** * 判断当前系统时间是否在指定时间的范围内 * * @param beginHour * 开始小时,例如22 * @param beginMin * 开始小时的分钟数,例如30 * @para ...

  7. sql语句延时执行或者是指定时间执行

    --使用waitfor语句延迟或暂停程序的执行 --waitfor{delay'time'|time 'time'} delay是指间隔时间 最长到24小时 time是指定时间执行 waitfor d ...

  8. java获取系统指定时间年月日

    java获取系统指定时间年月日 private String setDateTime(String falg) { Calendar c = Calendar.getInstance(); c.set ...

  9. s实现指定时间自动跳转到某个页面

    --js实现指定时间自动跳转到某个页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...

随机推荐

  1. 在element-ui的select下拉框加上滚动加载

    在项目中,我们需要运用到很多来自后端返回的数据.有时是上百条,有时甚至上千条.如果加上后端的多表查询或者数据量过大,这就导致在前端的显示就会及其慢,特别是在网络不好的时候更是如此. 自然,后端就做了一 ...

  2. linux学习第十七天(NFS、AUTOFS文件共享配置,DNS配置)

    一.NFS(网络文件系统,实现linux系统上文件共享) 服务器配置 yum install nfs-utils  (安装NFS软件包) iptables -F  (清空防火墙) service ip ...

  3. Word里面怎么取消全文每个标题前面都有的这个点

    Word里标题前面的那个点,如图1所示看起来觉得很不舒服,该怎么把它取消呢?(本测试环境是Win 10 64位系统,Microsoft Office家庭和学生版 2016) 图1 选中所有标题,如图2 ...

  4. 异步fifo with 读控制

    之前做LDPC编码器时,学习了一下异步FIFO的相关知识,主要参考了http://www.cnblogs.com/aslmer/p/6114216.html,并在此基础上根据项目需求,添加了一个读控制 ...

  5. FFM算法解析及Python实现

    1. 什么是FFM? 通过引入field的概念,FFM把相同性质的特征归于同一个field,相当于把FM中已经细分的feature再次进行拆分从而进行特征组合的二分类模型. 2. 为什么需要FFM? ...

  6. luogu1117 [NOI2016]优秀的拆分

    luogu1117 [NOI2016]优秀的拆分 https://www.luogu.org/problemnew/show/P1117 后缀数组我忘了. 此题哈希可解决95分(= =) 设\(l_i ...

  7. CSS3设置背景图片的大小

    设置背景图片的大小,以长度值或百分比显示,还可以通过cover和contain来对图片进行伸缩. background-size 语法详解: 要在插入图片之后进行设置背景图片的大小 backgroun ...

  8. 180813-Spring之RestTemplate使用小结一

    Spring之RestTemplate使用小结 作为一个Java后端,需要通过HTTP请求其他的网络资源可以说是一个比较常见的case了:一般怎么做呢? 可能大部分的小伙伴直接捞起Apache的Htt ...

  9. 在server 2003中搭建域服务(Http NTLM 代理)

    在server 2003中搭建域服务(Http NTLM 代理) 在windows server 2003 X64中搭建域服务的操作. 可参考百度经验:http://www.cnblogs.com/z ...

  10. 1.0 JAVA基础核心概念

    JAVA基础知识 转载至:http://www.runoob.com/java/java-variable-types.html 对菜鸟教程进行核心整理: 一.JAVA理论概念 1.基础概念 Java ...