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 ...
随机推荐
- 在element-ui的select下拉框加上滚动加载
在项目中,我们需要运用到很多来自后端返回的数据.有时是上百条,有时甚至上千条.如果加上后端的多表查询或者数据量过大,这就导致在前端的显示就会及其慢,特别是在网络不好的时候更是如此. 自然,后端就做了一 ...
- linux学习第十七天(NFS、AUTOFS文件共享配置,DNS配置)
一.NFS(网络文件系统,实现linux系统上文件共享) 服务器配置 yum install nfs-utils (安装NFS软件包) iptables -F (清空防火墙) service ip ...
- Word里面怎么取消全文每个标题前面都有的这个点
Word里标题前面的那个点,如图1所示看起来觉得很不舒服,该怎么把它取消呢?(本测试环境是Win 10 64位系统,Microsoft Office家庭和学生版 2016) 图1 选中所有标题,如图2 ...
- 异步fifo with 读控制
之前做LDPC编码器时,学习了一下异步FIFO的相关知识,主要参考了http://www.cnblogs.com/aslmer/p/6114216.html,并在此基础上根据项目需求,添加了一个读控制 ...
- FFM算法解析及Python实现
1. 什么是FFM? 通过引入field的概念,FFM把相同性质的特征归于同一个field,相当于把FM中已经细分的feature再次进行拆分从而进行特征组合的二分类模型. 2. 为什么需要FFM? ...
- luogu1117 [NOI2016]优秀的拆分
luogu1117 [NOI2016]优秀的拆分 https://www.luogu.org/problemnew/show/P1117 后缀数组我忘了. 此题哈希可解决95分(= =) 设\(l_i ...
- CSS3设置背景图片的大小
设置背景图片的大小,以长度值或百分比显示,还可以通过cover和contain来对图片进行伸缩. background-size 语法详解: 要在插入图片之后进行设置背景图片的大小 backgroun ...
- 180813-Spring之RestTemplate使用小结一
Spring之RestTemplate使用小结 作为一个Java后端,需要通过HTTP请求其他的网络资源可以说是一个比较常见的case了:一般怎么做呢? 可能大部分的小伙伴直接捞起Apache的Htt ...
- 在server 2003中搭建域服务(Http NTLM 代理)
在server 2003中搭建域服务(Http NTLM 代理) 在windows server 2003 X64中搭建域服务的操作. 可参考百度经验:http://www.cnblogs.com/z ...
- 1.0 JAVA基础核心概念
JAVA基础知识 转载至:http://www.runoob.com/java/java-variable-types.html 对菜鸟教程进行核心整理: 一.JAVA理论概念 1.基础概念 Java ...