DFS--障碍在指定时间会消失
哈利被困在了一个魔法花园里。魔法花园是一个 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--障碍在指定时间会消失的更多相关文章
- 可设置指定时间自己主动消失的 MessageBox实现
本文主要是讲怎样实现可设置指定时间自己主动消失的 MessageBox提示框ShowMessageBoxTimeout实现: 在开发client应用程序的时候.经经常使用得WinForm中Messag ...
- 【转】Expire Google Drive Files 让Google Docs云盘共享连接在指定时间后自动失效
最近在清理Google Docs中之前共享过的文件链接,发现Google Docs多人协作共享过的链接会一直存在,在实际操作中较不灵活.正好订阅的RSS推送了Pseric写的这篇文章 - Expire ...
- 在指定时间干,必须干(kbmmw 中的事件调度)
从去年开始,kbmmw 慢慢增加内涵,除了完善各种服务外,陆续增加和扩展了作为一个中间件必须有的功能, 例如,权限管理.日志系统.调度系统.内存调试等功能. 今天给大家介绍一下kbmmw 的调度事件, ...
- SQL Server 获取最后一天(指定时间的月最后一天日期)
/* author OceanHo @ 2015-10-23 10:14:21 获取指定时间字符串指定日期的月最后一天日期 */ IF OBJECT_ID('get_LastDayDate') IS ...
- C#使用Timer.Interval指定时间间隔与指定时间执行事件
C#中,Timer是一个定时器,它可以按照指定的时间间隔或者指定的时间执行一个事件. 指定时间间隔是指按特定的时间间隔,如每1分钟.每10分钟.每1个小时等执行指定事件: 指定时间是指每小时的第30分 ...
- Android判断当前系统时间是否在指定时间的范围内(免消息打扰)
/** * 判断当前系统时间是否在指定时间的范围内 * * @param beginHour * 开始小时,例如22 * @param beginMin * 开始小时的分钟数,例如30 * @para ...
- sql语句延时执行或者是指定时间执行
--使用waitfor语句延迟或暂停程序的执行 --waitfor{delay'time'|time 'time'} delay是指间隔时间 最长到24小时 time是指定时间执行 waitfor d ...
- java获取系统指定时间年月日
java获取系统指定时间年月日 private String setDateTime(String falg) { Calendar c = Calendar.getInstance(); c.set ...
- s实现指定时间自动跳转到某个页面
--js实现指定时间自动跳转到某个页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...
随机推荐
- 【OS X系统】Xcode中搭建Python环境。
虽然按照网上教程一步一步来,但还是遇到了几个错误点,现整理出来,主要是自己做个笔记,同时也希望能帮助到其他像我一样第一次在Xcode上搭建Python环境的人.首先感谢原作者:https://zhid ...
- Redis高级特性---------事务与持久化与发布订阅
一.redis事务的用法 1.开启事务:multi 2.提交事务:exec ( queued只是把指令放入队列中,没有执行) 3.取消事务:discard 4.redis事务不能保证同时成功或者失 ...
- GoldData学习实例-采集官网新闻数据
概述 在本节中,我们将讲述抓取政府官网地方新闻.并将抓取的新闻数据融入到以下两张数据表news_site和news中. news_site(新闻来源) 字段 类型 说明 id bigint 主键,自动 ...
- Python数值运算与赋值的快捷方式
一种比较常见的操作是对一个变量进行一项数学运算并将运算得出的结果返回给这个变量,因此对于这类运算通常有如下的快捷表达方式: a = 2a = a * 3 同样也可写作: a = 2a *= 3 要注意 ...
- JavaWeb基础—Tomcat
JavaWeb服务器:可以运行以及发布JavaWeb应用的JavaWeb容器,开发项目必须放在该容器中才可以被浏览器访问.(只能等待请求,然后做出响应) 静态资源(HTML):数据始终不变 动态资源( ...
- c++ 条件判断
if语句 认识算术比较 运算符表达式用法 关系运算符表达式 一. 基本的if语句 if (条件成立) { 则执行此语句 }; // ) printf("条件成立"); 二.认识算术 ...
- 04 - django的路由层 1
1.路由控制简单配置 from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003 ...
- 【Vijos】lxhgww的奇思妙想
题面 题解 求$k$级祖先孙子 为什么要用长链剖分啊??? 倍增并没有慢多少... 其实是我不会 长链剖分做这道题还是看这位巨佬的吧. 代码 #include<bits/stdc++.h> ...
- WPF中如何使用BusyIndicator
一.下载dll:http://wpftoolkit.codeplex.com/releases/view/99072 下载之后将WPFToolkit引用到WPF项目下: 二.添加命名空间: xmlns ...
- Python爬虫之requests库介绍(一)
一:Requests: 让 HTTP 服务人类 虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 ...