哈利被困在了一个魔法花园里。魔法花园是一个 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. JavaSE日常笔记汇总

    1. If和switch的比较 2. continue的注意事项 在for循环中,当执行continue语句时,i++还是会执行,continue语句只代表此次循环结束,i还是会累加,并继续执行下次循 ...

  2. js面向对象案例 贪吃蛇

    食物对象 (function () { //map:所在的父盒子,obj自身的一些属都具有默认值 function Food(map, obj) { obj = obj || {}; //没有则使用默 ...

  3. WPF设置全局字体和字体嵌入

    原文:WPF设置全局字体和字体嵌入 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/CLeopard/article/details/40590373 ...

  4. 2-5 re模块练习题

    1 练习: 1.验证手机号是否合法 2.验证邮箱是否合法 3.开发一个简单的python计算器,实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2 ...

  5. BZOJ4543 Hotel加强版

    题面 $\text{BZOJ}$间接权限题 洛谷的弱化版 题解 三点距离两两相等要满足以下条件: 有一个相同的$\text{LCA}$ 所以如果存在一个点,使得另外两个点在它子树中,距离为$d$,且$ ...

  6. OpenStack入门篇(二十)之实现阿里云ESC多FLAT网络

    1.给两台虚拟机增加网卡,使用仅主机模式,网段为:192.168.57.0/24 2.修改两台主机网卡配置 [root@linux-node1 ~]# cp /etc/sysconfig/networ ...

  7. SpringBoot日记——SpringMvc自动配置与扩展篇

    为了让SpringBoot保持对SpringMVC的全面支持和扩展,而且还要维持SpringBoot不写xml配置的优势,我们需要添加一些简单的配置类即可实现: 通常我们使用的最多的注解是: @Bea ...

  8. Win7搭建FTP服务器

    “控制面板” -> “程序和功能” -> “打开或关闭Windows 功能”: 1.展开“Internet 信息服务” 2.勾选“Internet Information Services ...

  9. python-我的第一门编程语言

    一.认识python是一个偶然,由于大学不务正业,混迹于各种电脑维修群(本人专业商务经济专业),了解过C.JAVA.HTML5以及世界上最好的编程语言PHP and so on!了解也仅仅是了解. 二 ...

  10. Qt-网易云音乐界面实现-8 主导航的实现-QtabWidget

    哎呀,堕落了,快有小两周没哟更新了,是在是没有动力了,浏览量连三位数都没有,是在是没有写下去的信心. 还有就是这个网易云音乐的代码量绝对是不可小视的,完全低估了这个软件的能量.昨天仔细想了一下,写不下 ...