刚学搜索,不知道剪枝的重要性。
超时代码:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
char maps[10][10];
const int moves[4][2] = {{0,-1},{0,1},{1,0},{-1,0}};
int m,n,t,di,dj;
bool escape;
void DFS(int si,int sj,int cnt)
{
if(si>n||si<=0||sj>m||sj<=0) return;
if(cnt==t&&si==di&&sj==dj)
{
escape = 1;
return;
}
for(int i=0;i<4;i++)
{
if(maps[si+moves[i][0]][sj+moves[i][1]]!='X')
{
maps[si+moves[i][0]][sj+moves[i][1]] = 'X';
DFS(si+moves[i][0],sj+moves[i][1],cnt+1);
maps[si+moves[i][0]][sj+moves[i][1]] = '.';
}
}
return;
}
int main()
{
freopen("E:\\ACM\\HDOJ\\hdoj_1010\\in.txt","r",stdin);
int si,sj;
while(cin>>n>>m>>t)
{
if(n==0&&m==0&&t==0) break;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>maps[i][j];
if(maps[i][j]=='S')
{
si = i;
sj = j;
}
else if(maps[i][j]=='D')
{
di = i;
dj = j;
}
}
}
escape = 0;
maps[si][sj] = 'X';
DFS(si,sj,0);
if(escape) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
网上搜下,是奇偶性剪枝:
-
//Tempter of the Bone
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/*奇偶剪枝的重要思想是:如果从当前位置还需要偶数(奇数)的时间才能到达目标位置,而当前剩余的时间数
为奇数(偶数),那么即刻退出不再沿着纵深方向继续搜索。略微思考便知:奇偶剪枝的效果是立竿见影的!
*/
1、temp = (t-cnt) - abs(si-di) - abs(sj-dj);
if(temp<0||temp&1) return;
2、可移动的步数大于给定的时间
起到了立竿见影的效果!
分享到:
相关推荐
ACM hdu 线段树题目+源代码 线段树是一种非常重要的数据结构,它广泛应用于算法竞赛和实际编程中。今天,我们将通过 ACM hdu 的几个题目来学习和掌握线段树的基本概念和应用。 线段树的基本概念 线段树是一种...
这个压缩包文件包含的是从HDU题目ID1010到2500之间的部分解题报告,对于想要提升编程能力、学习算法知识的ACMer来说,是一份宝贵的资源。 这些解题报告通常会包含以下几个方面的重要知识点: 1. **题目描述**:每...
杭州电子科技大学oj平台上的第1010题,是关于搜索的题目,很不错的题
Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。 这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。...
本报告围绕“ACM.rar”这个压缩包,我们将深入探讨其中涉及到的三道题目——HDU1010、ZOJ1010和ZOJ1015,并分享一些原创解题思路,尽管这些算法可能并非最优,但它们为我们提供了一种独特的视角来理解和解决问题。...
本人准备2020年保研机试时刷的题目(虽然最后机试取消了,...来自某中流985,在HDU和vjudge平台上大概刷了400道。本文件地图(excel表格)包含了绝大部分我刷过的题目,笔记中具有思路、代码、总结和心得。 大佬勿入!
acm入门之枚举搜索,学校第一次acm培训,包括枚举及其优化,dfs和bfs
HDU(杭州电子科技大学)在线评测系统是许多编程竞赛爱好者和学习者经常访问的平台,它提供了大量的算法题目供用户练习和挑战。这个压缩包文件“HDU 2000-2099 解题报告”显然包含了在这个题号范围内的一些问题、...
4. **排序与搜索**:快速排序、归并排序、二分查找等经典算法在HDU题目中经常出现。解题报告会深入讲解这些算法的原理和应用场景,并给出高效的实现代码。 5. **字符串处理**:包括KMP算法、Manacher's Algorithm等...
在C++编程语言中,`new`和`delete`是两个关键的操作符,它们与C语言中的`malloc`和`free`有所不同。`new`不仅分配内存,还会根据指定的类型调用对应的构造函数来初始化对象,而`malloc`仅仅分配内存,不涉及对象的...
hdu 3341(ac自动机+状态压缩) 题意:容易理解... 思路:首先一开始容易想到要用到dp,开设一个dp[41][41][41][41][501]的数组来解决,但是明显内存已经超出范围了,于是就想如何减少内存呢?只要知道A、T、C、G其中...
HDU 300+ AC 代码集合是一个包含超过300个已通过验证的算法解决方案的资源,这些代码主要用于解决各类计算机编程竞赛中的问题。这些竞赛通常由杭州电子科技大学(HDU)主办,旨在提升参赛者的算法设计、编程和问题...
搜索题是 ACM HDU 题目分类中的一大类,例如,1010 搜索题,剪枝很关键;1016 经典的搜索;1026 搜索;1043 经典搜索题,八数码问题;1044 稍微有点麻烦的搜索题;1045 搜索题,可用匹配做 等等。 贪心算法 贪心...
【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...
HDU(杭州电子科技大学在线评测系统)是一个深受程序员喜爱的在线编程练习平台,它提供了丰富的算法题目供用户挑战,帮助他们提升编程技能和算法理解能力。"hdu.rar_hdu"这个压缩包文件很可能是某位程序员整理的他在...
"hdu 1695 GCD(欧拉函数+容斥原理)" 题目大意是:给定 a, b, c, d, k,找到一队 x, y,满足 g(x, y) = k,且 x ∈ [1, b], y ∈ [1, d],问有多少对符合要求的 (x, y)。 思路是:gcd(x, y) == k 解释 x, y 都能...
【标题】"HDU题目java实现"所涉及的知识点主要集中在使用Java编程语言解决杭州电子科技大学(HDU)在线评测系统中的算法问题。HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案...
### hdu1250高精度加法 #### 背景介绍 在计算机科学与编程竞赛中,处理大整数运算(特别是加法、减法、乘法等)是常见的需求之一。当数字的位数超过了标准数据类型(如`int`、`long`等)所能表示的最大值时,就需要...
【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...
最后,"HDU+ACM课件"可能是一个综合性的课件集合,涵盖了ACM竞赛的各种主题,包括数据结构、算法、问题解决策略等。这是一份全面的学习资料,对于系统性地学习ACM知识非常有价值。 通过学习这些文件,你可以深入...