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

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

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

#include<iostream>
using namespace std;
int n,m,k;
#define max 100
char mmap[max][max];
int mmin;
#define MIN(a,b) ((a)<(b)?(a):(b));
int x1,x2,y1,y2;
int mmde[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int visited[max][max];
int step;
int sum;
void dfs(int x,int y){ int i;
int mx,my;
if(mmap[x][y]=='3'){
mmin=MIN(step,mmin); }
else
// if(mmap[x][y]!='1'||(step%k==0&&mmap[x][y]=='1'))
{
int no=0;
for(i=0;i<4;i++){
mx=x+mmde[i][0];
my=y+mmde[i][1];
// cout<<"pre:"<<endl<<" x: "<<mx<<" y: "<<my<<" step: "<<step<<endl;
if(
(
(mmap[mx][my]!='1'&&!visited[mx][my]&&mx>=1&&mx<=n&&my>=1&&my<=m)
||
(
(step+1)%k==0&&mmap[mx][my]=='1'
)
)
&&
(
abs(mx-x2)+abs(my-y2)+step<mmin
)
){
step++;
sum++;
visited[mx][my]=1;
dfs(mx,my);
visited[mx][my]=0;
step--; }
else no++;
/*
else if(abs(mx-x2)+abs(my-y2)+sum>mmin){
cout<<"too long"<<endl; }
else
{
cout<<"weizhishoxian"<<endl; } */
}
//重复走 样例3
if(no==4){
for(i=0;i<4;i++){
mx=x+mmde[i][0];
my=y+mmde[i][1];
if(mmap[mx][my]=='0'||mmap[mx][my]=='2'){
// cout<<"visited---mmap["<<mx<<"]["<<my<<"] to 0"<<endl;
visited[mx][my]=0;} }
for(i=0;i<4;i++){
mx=x+mmde[i][0];
my=y+mmde[i][1];
if(
(
(mmap[mx][my]!='1'&&!visited[mx][my]&&mx>=1&&mx<=n&&my>=1&&my<=m)
||
(
(step+1)%k==0&&mmap[mx][my]=='1'
)
)
&&
(
abs(mx-x2)+abs(my-y2)+step<mmin
)
){
step++;
sum++;
visited[mx][my]=1;
dfs(mx,my);
visited[mx][my]=0;
step--; }
}
} }
}
int main(){
//scanf("%d%d%d",&n,&m,&k);
int icase;
cin>>icase;
while(icase--){
cin>>n>>m>>k;
int i,j;
memset(visited,0,sizeof(visited));
mmin=1000000;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
cin>>mmap[i][j];
if(mmap[i][j]=='2')
{x1=i;y1=j;}
else if(mmap[i][j]=='3')
{x2=i;y2=j;}
}
}
visited[x1][y1]=1;
// cout<<"now:x1:"<<x1<<" y1:"<<y1<<endl;
step=0;
sum=0;
dfs(x1,y1);
if(mmin==1000000)cout<<"Mobiliarbus"<<endl;
else cout<<mmin<<endl;
// cout<<"sum:"<<sum<<endl;
}
}
/*
100
6 6 2
000200
000100
010000
000100
000100
001310
7
6 6 2
000300
000100
010000
000100
000100
001210
Mobiliarbus
3 5 3
00102
00011
00300
6
3 5 3
00002
00111
00300
4
&&(abs(mx-x2)+abs(my-y2)+step<=mmin))剪枝
*/

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

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. Delphi XE7调用C++动态库出现乱码问题回顾

    事情源于有个客户需使用我们C++的中间件动态库来跟设备连接通讯,但是传入以及传出的字符串指针格式都不正确(出现乱码或是被截断),估计是字符编码的问题导致.以下是解决问题的过程: 我们C++中间件动态库 ...

  2. 20155231 邵煜楠《网络对抗技术》实验一 PC平台逆向破解

    20155231 邵煜楠<网络对抗技术>实验一 PC平台逆向破解 实验内容 直接修改程序机器指令,改变程序执行流程: 通过构造输入参数,造成BOF攻击,改变程序执行流: 注入Shellco ...

  3. 20155211 2016-2017-2 《Java程序设计》第九周学习总结

    20155211 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 一.JDBC入门 (一)JDBC简介 厂商在操作JDBC驱动程序时,依 ...

  4. 北京Uber优步司机奖励政策(4月22日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  5. cogs791 [HAOI2012] 音量调节

    大水题 这种题谁不能1A谁就吔屎/退役吧(说的就是我) 设dp[i][j]表示调完前i个音量为j有没有可能 没了 // It is made by XZZ // Fei Fan Ya Xi Lie~~ ...

  6. Linux之linux入门

    学习linux之前先了解一下操作系统: 操作系统的定义:         操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内 ...

  7. Python学习过程笔记整理(四)

    变量作用域 -分类 -全局(global):在函数外部定义:整个全局范围都有效 -局部(local):在函数内部定义:仅在局部范围有效 -提升局部变量为全局变量 -使用global -globals, ...

  8. VM虚拟机安装CentOS 7.0添加jdk环境

    虚拟机注册码 5A02H-AU243-TZJ49-GTC7K-3C61N 安装centos系统,网络类型选择桥接网络安装完成后vi /etc/sysconfig/network-scripts/ifc ...

  9. python爬虫beautifulsoup4系列2

    前言 本篇详细介绍beautifulsoup4的功能,从最基础的开始讲起,让小伙伴们都能入门 一.读取HTML页面 1.先写一个简单的html页面,把以下内容copy出来,保存为html格式文件 &l ...

  10. vue 组件-父组件传值给子组件

    父组件通过属性,传值给子组件,子组件通过,props数组里的名称来接受父组件传过来的值. HTML部分: <div id="app"> <tmp1 :parent ...