`

zoj 2110 Tempter of the Bone (dfs搜索)

阅读更多

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1110

 

结题报告:搜索中的一个重要的剪枝,现在记录下来,作为一个积累; 

起点到终点的距离即sx-ex+sy-ey如果是奇数, 则题目中所给定的时间一定是只有奇数才可能得到结果,如果题目中的起点到终点的距离如果是偶数,则题目中给的时间如果是偶数才可能得到想要的结果。如何优化题目代码已经标记:

 

 

#include<cstdio>
#include<cstring>
using namespace std;

const int maxn = 10;
int n,m,t,step,flag;
int dir[4][2]={0,-1,0,1,1,0,-1,0};
char mp[maxn][maxn];
int sx,sy,ex,ey;

void dfs(int d,int r,int s)
{
	if(d<0||d>=n||r<0||r>=m) return ;
	if(ex==d&&ey==r&&s==t)
	{
		flag = 1;
		return s;
	}
	for(int i=0;i<4;i++)
	{
		int xx=d+dir[i][0];
		int yy=r+dir[i][1];
		if(mp[xx][yy] != 'X')
		{
			mp[xx][yy]='X';
			dfs(xx,yy,s+1);
			if(flag) return 1;
			mp[xx][yy]='.';
		}
	}
	return s ;
}

int main()
{
	int cnt ;
	while(scanf("%d %d %d",&n,&m,&t)!=EOF)
	{
		cnt=0;
		if(!(n || m || t)) break;
		for(int i=0;i<n;i++)
		{
			scanf("%s",mp[i]);	
			for(int j=0;j<m;j++)
			{
				if(mp[i][j] == 'S')
				{
					sx=i;
					sy=j;
				}
				if(mp[i][j] == 'D')
				{
					ex=i;
					ey=j;
				}
				if(mp[i][j]=='X')
					cnt++;
			}
		}
		if(n*m-cnt<=t)
		{
			printf("NO\n");
			continue;
		}
		int temp = t-(sx-ex+sy-ey);
		if(temp <0||temp%2)//一个重要的优化 
		{
			printf("NO\n");
			continue;
		} 
		flag = 0;
		mp[sx][sy]='X';
		dfs(sx,sy,0);
		if(flag) printf("YES\n");
		else printf("NO\n");
	}
	return 0;
} 

 

分享到:
评论

相关推荐

    ACM zoj题目 源代码

    5. **2110Tempter of the Bone.cpp**:这个题目名称较为抽象,但根据ACM背景,可能是关于贪心策略或动态规划的问题,涉及到如何选择最优决策来达到目标。 6. **1062Trees Made to Order.cpp**:这很可能是关于树...

    zoj 3663 Polaris of Pandora.md

    zoj 3663 Polaris of Pandora.md

    zoj 1002_zoj1002_

    在ZOJ上,每个题目都有自己的标签,便于用户搜索和分类。 【压缩包子文件的文件名称列表】仅有一个文件名 "zoj 1002",这很可能是一个C++源代码文件,可能命名为`zoj1002.cpp`或`zoj1002.cc`,用于解决ZOJ 1002题目...

    zoj 1610 Count the Colors.md

    zoj 1610 Count the Colors.md

    zoj 源码700题

    【标题】"zoj 源码700题"是指一个包含700多道ZOJ(在线判题系统Zhejiang Online Judge)编程竞赛题目的源代码集合。这个资源对于学习算法、提高编程技能以及准备编程竞赛的学员来说极具价值。 【描述】"包含了zoj...

    zoj 1255 The Path.md

    zoj 1255 The Path.md

    zoj 1810 The Gourmet Club.md

    zoj 1810 The Gourmet Club.md

    zoj 2151 The Highest Profits.md

    zoj 2151 The Highest Profits.md

    zoj 2499 The Happy Worm.md

    zoj 2499 The Happy Worm.md

    ZOJ:浙江大学程序在线评测系统.docx

    ZOJ,全称“浙江大学程序在线评测系统”(Zhejiang University Online Judge),是一个提供信息学(算法竞赛)题库及程序评测的网站。以下是关于ZOJ的详细介绍: 一、基本信息 名称:浙江大学程序在线评测系统(ZOJ)...

    zoj 题库 详细解答 解题代码

    zoj 题库 详细解答 解题代码 该资源主要涵盖了 zoj 题库中的各种编程题目,涵盖了基本算法、数据结构、数学运算等多个方面的知识点。下面是对该资源中出现的知识点的详细解释: 1. 第一次 ACM 总结(7th ACM) 该...

    ZOJ月赛 题解 (ZOJ Monthly, August 2014)

    2. **搜索与图论**:深度优先搜索(DFS)、广度优先搜索(BFS)在图论问题中广泛使用,如最短路径、最小生成树、拓扑排序等。理解和熟练运用这些方法能帮助解决复杂的问题。 3. **动态规划(DP)**:动态规划是一种...

    ZOJ题目答案源码

    首先,我们可以从这些源代码中学习到基础的算法思想,如排序算法(快速排序、归并排序、冒泡排序、插入排序等)、搜索算法(二分查找、深度优先搜索、广度优先搜索等)。这些算法是解决问题的基本工具,理解和掌握...

    zoj1027解题指南

    【标题】"ZOJ1027解题指南"是一个针对特定编程竞赛题目——ZOJ1027的解决方案集合。ZOJ,全称为“Zhejiang Online Judge”,是浙江大学主办的一个在线编程竞赛平台,提供了丰富的算法题目供参赛者练习和挑战。本解题...

    Problem Arrangement zoj 3777

    Problem Arrangement zoj 3777

    浙江大学ZOJ题目分类

    浙江大学ZOJ(Zhejiang University Online Judge)是一个在线编程练习平台,主要服务于计算机科学和技术的学习者,特别是对算法和编程有浓厚兴趣的学生。这个平台提供了大量的编程题目,涵盖了各种难度和主题,帮助...

    zoj.gz_ ZOJ_ZOJ 1016_max flow_zoj 1045_zoj.rar

    标题中的"ZOJ.gz_ ZOJ_ZOJ 1016_max flow_zoj 1045_zoj.rar" 提到了两个ZOJ(Zhejiang Online Judge)的题目,分别是1016和1045,这两个数字通常代表在线编程竞赛中的题目编号。这些题目通常涉及到算法和数据结构的...

    zoj 700源代码

    1. **基础算法**:源代码中可能涉及了各种基础算法,如排序(快速排序、归并排序、堆排序)、搜索(深度优先搜索、广度优先搜索)、图论(最短路径、最小生成树)、动态规划等。这些都是编程竞赛中常见的问题解决...

    zoj.zip_zoj

    3. **搜索算法**:深度优先搜索(DFS)、广度优先搜索(BFS)、A* 搜索、Dijkstra 算法、Floyd-Warshall 算法等,这些是解决图论问题和路径查找的关键。 4. **动态规划**:背包问题、最长公共子序列、最短路径、...

    ZOJ.zip_Jugs A_ZOJ NTA_zoj acm_zoj acm 1216_zoj code

    【ZOJ.zip】是一个压缩包,里面包含了与ZOJ(Zhejiang Online Judge)相关的ACM(International Collegiate Programming Contest)题解。ZOJ是一个在线编程竞赛平台,它为参赛者提供了一系列算法题目进行练习,以...

Global site tag (gtag.js) - Google Analytics