hdu 1010Tempter of the Bone(经典奇偶剪枝)

2024-03-15 10:38

本文主要是介绍hdu 1010Tempter of the Bone(经典奇偶剪枝),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

              初看这题,感觉很简单, 结果一直超时, 添了剪枝1,  发现需要仍然超时, 上网搜了下, 加了剪枝2,结果仍然超时, 原来这个题是经典的奇偶剪枝……

       将剪枝3添上以后,惊奇地发现WR了, 怎嘛可能……纠结了很久, 在网上发现一个结题报告说这个不能单个的输入字符!! 修改了下, 果断AC了……还有, 我今天突然发现函数 abs()竟然不在头文件math.h下, 而是在stdlib.h下……

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int n, m, t, map[8][8];
int a[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int DFS(int num, int x, int y, int ex, int ey)
{if( num==t && x==ex && y==ey) return 1;if( num>=t ) return 0;//若在t时间未到达,剪枝if(t-num<(abs(ex-x)+abs(ey-y)) )return 0;//剪枝2:需要的时间比理论上的最短时间还小if( (t-num-(abs(ex-x)+abs(ey-y)))%2!=0 ) return 0;// 剪枝3:比理论上的最短距离多出来的必是偶数int i, x1, y1;for(i=0; i<4; i++){x1=x+a[i][0];y1=y+a[i][1];if(x1>=0&&x1<m && y1>=0&&y1<n && map[y1][x1]){map[y1][x1]=0;if( DFS( num+1, x1, y1, ex, ey))return 1;map[y1][x1]=1;}}return 0;
}
int main()
{int sx, sy, ex, ey;int i, j;char  str[8];while( scanf("%d %d %d", &n, &m, &t) &&(n+m+t)!=0){for(i=0; i<n; i++){scanf("%s", str);for(j=0; j<m; j++){map[i][j]=0;if(str[j]=='S'){sx=j;sy=i;}else if(str[j]=='D'){ex=j;ey=i;map[i][j]=1;}else if(str[j]=='.')  map[i][j]=1;}}if( DFS(0, sx,sy, ex,ey) ) printf("YES\n");else printf("NO\n");}
}


这篇关于hdu 1010Tempter of the Bone(经典奇偶剪枝)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/811681

相关文章

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana

前端 CSS 经典:文字描边

前言:文字描边有两种实现方式 1. text-shadow 设置 8 个方向的文字阴影,缺点是只有八个方向,文字转角处可能有锯齿状。不支持文字透明,设置 color: transparent,文字会成描边颜色。 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8" /><meta http-equiv="X-UA-Comp

LeetCode:经典题之141、142 题解及延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 142.环型链表 目录 系列目录141. 环形链表常量因子 1

【数据结构与算法 经典例题】使用队列实现栈(图文详解)

💓 博客主页:倔强的石头的CSDN主页               📝Gitee主页:倔强的石头的gitee主页    ⏩ 文章专栏:《数据结构与算法 经典例题》C语言                                   期待您的关注 ​​ 目录  一、问题描述 二、前置知识 三、解题思路 四、C语言实现代码 🍃队列实现代码:

海量数据处理经典思想

第一部分、十五道海量数据处理 1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?     方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(

LeetCode:经典题之389 题解与延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 142.环型链表 目录 系列目录389.找不同哈希表

上海邀请赛 A题目 HDU 5236(dp)

先求出没有ctrl+s的时候构造长度为i的期望f[i] 。然后枚举保存的次数,求出最小即可。 #include<cstdio>#include<cstdio>#include<cmath>#include<queue>#include<stack>#include<string>#include<cstring>#include<iostream>#include<map>

hdu 2586 树上点对最近距离 (lca)

,只要知道dis[i][j]=dis[i][root]+dis[j][root]-2*dis[Lca(i,j)][root].   其中root为树的根节点,LCA(i,j)为i,j的最近公共祖先。 所以我们先把所有的询问储存下来,然后离线直接查询。复杂度是o(n+q)的。 VIE #include<cstdio>#include<algorithm>#include<i

【经典算法】LeetCode 22括号生成(Java/C/Python3/Go实现含注释说明,中等)

作者主页: 🔗进朱者赤的博客 精选专栏:🔗经典算法 作者简介:阿里非典型程序员一枚 ,记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法(公众号同名) ❤️觉得文章还不错的话欢迎大家点赞👍➕收藏⭐️➕评论,💬支持博主,记得点个大大的关注,持续更新🤞 ————————————————- 首先,请注意题目链接有误,您提供的链接是LeetCode 14,但题目

前端 CSS 经典:mix-blend-mode 属性

前言:这是一个混合属性,作用是将两个颜色混合生成一个新颜色。可以将视频和文字相融合,产生动态文字效果。 效果 实现代码  <!DOCTYPE html><html lang="en"><head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><metaname="viewpo