dfs的剪枝优化
两个剪枝问题
1. 当两点的距离(需要走的步数)大于剩下的时间时 剪去
2.奇偶剪枝问题
如果起点到终点所需走的步数的奇偶性与时间奇偶性不同的时候 剪去
起点到终点步数的奇偶性的判断
首先 明确点的奇偶性判断 看起横纵坐标和为奇数还是偶数
如果起点和终点的奇偶性相同 则步数为偶数 否则为奇数
具体的代码实现 (start1+start2+end1+end2+time)%2==1 (如果两个数的奇偶性相同的话 两者和对2取余为0)
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<stdlib.h>
using namespace std;
int n,m,time;
int flag;//判断是否有符合条件的搜索
int visit[20][20];
char mapp[20][20];
int dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}};//用于四个方向的遍历
void dfs(int x,int y,int t)
{
int i;
if(flag==1) return;//找到一个就退回。。 减少时间的消耗
if(mapp[x][y]=='D')
{
if(t==time)
flag=1;
return; //递归的终止条件 得多注意
}
if(t>=time) return;
for(i=0;i<4;i++)
{
int xx,yy;
xx=x+dir[i][0];
yy=y+dir[i][1];
if(xx<0||xx>=n||yy<0||yy>=m||mapp[xx][yy]=='X'||visit[xx][yy]==1) continue;
visit[xx][yy]=1;
dfs(xx,yy,t+1);//此时的i如果为全局变量的话 这里就对i的值做了改变
visit[xx][yy]=0;
}
}
int main()
{
int start1,start2,i,j,end1,end2;
while(scanf("%d %d %d",&n,&m,&time)!=EOF)
{
if(n==0&&m==0&&time==0) break;
memset(visit,0,sizeof(visit));
flag=0;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
cin>>mapp[i][j];
}
}
for(i=0;i<n;i++)//找到初始位置 终止位置 便于剪枝的进行
{
for(j=0;j<m;j++)
{
if(mapp[i][j]=='S')
{
start1=i;
start2=j;
}
if(mapp[i][j]=='D')
{
end1=i;
end2=j;
}
}
}
if((abs(start1-end1)+abs(start2-end2))>time||(start1+start2+end1+end2+time)%2==1)//剪枝咯 第一个剪枝为如果剩下的距离大于时间 剪去 第二个剪枝是奇偶减枝
{
printf("NO\n");
continue;
}
visit[start1][start2]=1;
dfs(start1,start2,0);
if(flag==1) printf("YES\n");
else printf("NO\n");
}
return 0;
}
这次优化主要就是应用了剪枝 加油
dfs的剪枝优化的更多相关文章
- hdu 4109 dfs+剪枝优化
求最久时间即在无环有向图里求最远路径 dfs+剪枝优化 从0节点(自己添加的)出发,0到1~n个节点之间的距离为1.mt[i]表示从0点到第i个节点眼下所得的最长路径 #include<iost ...
- 搜索(剪枝优化):HDU 5113 Black And White
Description In mathematics, the four color theorem, or the four color map theorem, states that, give ...
- 图解Leetcode组合总和系列——回溯(剪枝优化)+动态规划
Leetcode组合总和系列--回溯(剪枝优化)+动态规划 组合总和 I 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 ...
- HDU2433 最短路 + 剪枝优化
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2433 ,最短路(SPFA或优化过的Dijstra) + 剪枝优化 这道题关键还是在几个剪枝上面,没有剪 ...
- hdoj--1010<dfs+奇偶剪枝>
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目描述:在n*m的矩阵中,有一起点和终点,中间有墙,给出起点终点和墙,并给出步数,在该步数情况 ...
- hdu1010 Tempter of the Bone —— dfs+奇偶性剪枝
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 Tempter of the Bone Time Limit: 2000/1000 MS (Ja ...
- TensorFlow官方发布剪枝优化工具:参数减少80%,精度几乎不变
去年TensorFlow官方推出了模型优化工具,最多能将模型尺寸减小4倍,运行速度提高3倍. 最近现又有一款新工具加入模型优化"豪华套餐",这就是基于Keras的剪枝优化工具. 训 ...
- HDU 1010 Tempter of the Bone DFS(奇偶剪枝优化)
需要剪枝否则会超时,然后就是基本的深搜了 #include<cstdio> #include<stdio.h> #include<cstdlib> #include ...
- 带分数dfs+剪枝优化
#include<iostream>#include<cstdio>#include<cstdlib>#include<ctime>using name ...
随机推荐
- taocrypt
taocrypt MySQL Bugs: #25189: mysqld: coding.cpp:243: void TaoCrypt::Base64Decoder::Decode(): Asserti ...
- ActiveMQ处理模式
一.PTP处理模式(Queue) 消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息. 消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消 ...
- Java static静态关键字 有啥用
#static有啥用 在Java语言中,static表示“静态”的意思,使用场景可以用来修饰成员变量和成员方法,当然也可以是静态代码块.static的主要作用在于创建独立于具体对象的域变量或者方法. ...
- Gradle: 一个诡异的问题(ERROR: Failed to parse XML AndroidManifest.xml ParseError at [row,col]:[5,5] Message: expected start or end tag)
今天同事说他下了一个老版本的AS项目死活编不过,我心想不就是一个项目么,编不过要么就是代码有问题,要么就是依赖库不完整这能有什么问题,于是自己在自己电脑试了下,结果自己也中招了: 乍一看这个错误,说是 ...
- 阿里云EDAS功能简介
尊敬的 EDAS 用户: 您好!为了给您带来更好的服务和使用体验,EDAS 产品团队将对 EDAS 标准版(含按量付费和包年包月)进行一轮调整,包括按量付费标准版价格和免费额度的更新,以及标准版套餐的 ...
- Spring cloud微服务安全实战-5-8实现基于session的SSO(认证服务器的session有效期)
认证服务器 session的有效期. 也就是认证服务器上的session的有效期 生成环境下,认证服务器一定是一个集群.集群.那么session一定是要在所有的服务器之间进行共享的.最简单的方式是用S ...
- "AttributeError: /lib64/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup"
以前在openssl,有 EVP_CIPHER_CTX_cleanup函数. 1.1.0版本中 替换成为EVP_CIPHER_CTX_reset 解决办法: 找到报错的文件vim /usr/local ...
- Spring Boot与MyBatis的集成
SSM(Spring+Spring MVC+MyBatis)是当前主流的框架组合开发方式之一,普遍被应用于互联网项目中.如果要使用Spring Boot开发一个基于SSM框架的应用,那么我们要怎么做呢 ...
- easymock的用法
常用场景 几个值随机取1个 "f08|1": ["有", "没有", "不知道"], 轮训抽一个 "f08|+ ...
- Docker之使用Docker-compose搭建LNMP环境
之前有随笔介绍使用Docker-compose搭建LNMP环境(centos6 php5.6) https://www.cnblogs.com/minseo/p/10146982.html 本文介绍D ...