哈利被困在了一个魔法花园里。魔法花园是一个 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. fastRPC服务使用

    现在出现了很多中间件解决跨语言问题,使用RPC远程调用:但是庞大是个问题,而且要按照格式使用.尤其是源码量比较庞大. 为了简单易用,我采用订阅发布模型,在此基础上创建了fastRPC,模拟RPC,调用 ...

  2. koa2实现简单的图片上传

    1.安装koa-body 2.引入koa-body const koa = require('koa'); const fs = require('fs'); const koaBody = requ ...

  3. Mac 使用.bash_profile

    1.打开terminal(终端) 2.open .bash_profile (打开.bash_profile文件,如果文件不存在就  创建文件:touch .bash_profile  编辑文件:op ...

  4. Weblogic申请和配置SSL证书

    一. 概述 SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协 ...

  5. 大数据入门第一天——基础部分之Linux基础(环境准备与先导知识)

    一.Linux环境安装 1.VM的安装 参考Linux环境搭建随笔:http://www.cnblogs.com/jiangbei/p/7248054.html 2.CentOS的安装 同参考上述随笔 ...

  6. 2017-2018-2 《网络对抗技术》20155322 Exp7 网络欺诈防范

    [-= 博客目录 =-] 1-实践目标 1.1-实践介绍 1.2-实践内容 1.3-实践要求 2-实践过程 2.1-简单应用SET工具建立冒名网站 2.2-ettercap DNS spoof 2.3 ...

  7. jQuery学习-自定义动画

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. 一维码UPC A简介及其解码实现(zxing-cpp)

    UPC(Universal Product Code)码是最早大规模应用的条码,其特性是一种长度固定.连续性的条  码,目前主要在美国和加拿大使用,由于其应用范围广泛,故又被称万用条码. UPC码仅可 ...

  9. AGC 030 B - Tree Burning

    B - Tree Burning 链接 题意: 一个长度为L的环,有n个位置上有树,从0出发,每次选择一个方向(顺时针或者逆时针),一直走,直到走到一棵树的位置,烧掉这棵树,重复这个过程,直到没有树. ...

  10. c#使用 HtmlAgilityPack来进行抓取和解析来获得table表格信息

    项目上要用到抓取网页,最后选用了HtmlAgilityPack来进行. 官网地址:https://html-agility-pack.net/,可以看一下 基础的: // From File var ...