`
人生难得糊涂
  • 浏览: 117897 次
社区版块
存档分类
最新评论

poj3278-分支限界法

 
阅读更多

题目大意:一个农夫抓牛,农夫坐标为n,牛坐标为p,农夫有三种移动方式,1.从x到x-1 .2.从x到x+1 3.从x到2*x;   求农夫抓到牛所需移动最少的步数。

 思路:做题的时候知道是属于分支限界法这类的题,于是采用BFS ,如果事先不知道的话 可能会用DFS递归搜索。。   重点是在剪枝上,要注意两个方面的剪枝,1是当前节点的值如果大于牛的坐标的话 ,那 x+1 x*2 的移动方式就不入队列(即剪枝)。2是记录走过的节点,走过的节点不再走(这个我很惭愧的没想到,一直TLE后老师说了以后再AC的)。

具体看代码

#include<iostream>
#include<queue>
using namespace std;
int vis[200010];//标记数组 记录走过的元素
int main()
{
	int n,k;
	
	queue<int>q;
	scanf("%d",&n);
	scanf("%d",&k);
	if(n==k)
	{
		cout<<0<<endl;
		return 0;
	}
	q.push(n);
	vis[n]=1;
	q.push(-1);
	int flag=0;
	
	int step=0;
	while(true)
	{
		int t,t1,t2,t3,t4;
		t=q.front();
		q.pop();
		if(t==-1)
		{
			q.push(-1);
			step++;
			continue;
		}
		
		t1=t*2;
		t2=t+1;
		t3=t-1;
		t4=-1;
		
		if(t1==k||t2==k||t3==k)
		{
			step++;
			cout<<step<<endl;
			break;
		}
		if(t1<0||t1>100000||t>k||vis[t1]==1)
			;
		else
			q.push(t1);

		if(t2<0||t2>100000||t>k||vis[t2]==1)
			;
		else
			q.push(t2);
		if(t3<0||t3>100000||vis[t3]==1)
			;
		else
			q.push(t3);
		vis[t1]=1;
		vis[t2]=1;
		vis[t3]=1;
		
	}
	return 0;
}

 

0
0
分享到:
评论

相关推荐

    POJ1000-1299中的80题AC代码

    2. **算法**:排序(冒泡、选择、插入、快速、归并等)、搜索(顺序、二分、深度优先、广度优先等)、动态规划(记忆化搜索、状态转移方程)、贪心算法、回溯法、分支限界法等。 3. **字符串处理**:KMP算法、Rabin...

    poj acm300题 c++源码打包

    2. **高级算法**:如回溯法、分支限界法、贪心算法、模拟退火、遗传算法等。 3. **数据结构**:链表、栈、队列、树(二叉树、平衡树、B树、Trie树等)、图、哈希表、堆等。 4. **数学知识**:组合数学、数论、线性...

    POJ上一些已经AC的代码

    2. **高级算法**:包括动态规划、贪心算法、回溯法、分支限界法等复杂问题的解决方案。 3. **数据结构**:链表、树、图、堆、队列、栈等数据结构的使用场景和实现细节。 4. **字符串处理**:如KMP算法、Manacher's...

    我的Poj里的一些AC代码

    5. **回溯法与分支限界**:对于一些组合优化问题,如N皇后问题,代码可能采用回溯法或分支限界法进行搜索。 6. **图论与网络流**:包括深度优先搜索(DFS)、广度优先搜索(BFS)、最大流问题和最小割问题等。 7. ...

    POJ部分题解

    5. **回溯法与分支限界**:这两者常用于解决组合优化问题,如八皇后问题、N皇后问题、图着色问题等。通过尝试所有可能的解,并在不合适时回溯,或者通过剪枝减少搜索空间,可以有效地找到解。 6. **图论算法**:...

    poj题目分类,关于acm/icpc

    1. **复杂算法**:动态规划、贪心算法、回溯法、分支限界法、最小生成树(Prim或Kruskal算法)、最短路径(Dijkstra或Floyd算法)等。 2. **高级数据结构**:哈希表、堆(最大堆和最小堆)、 Trie 字典树、B树和B+树...

    北京大学poj题目解题代码

    6. **回溯法与分支限界**:用于解决组合优化问题和图论问题,如八皇后问题、N皇后问题、旅行商问题等。 7. **图论算法**:包括深度优先搜索(DFS)、广度优先搜索(BFS)、最短路径算法(Dijkstra、Floyd-Warshall...

    poj 经典题目解题报告

    2. **算法设计**:包括排序算法(快速排序、归并排序、冒泡排序等)、查找算法(二分查找、哈希查找等)、动态规划、贪心策略、回溯法、分支限界法等。解题报告会详细阐述每种算法的思想,以及如何在特定题目中应用...

    POJ经典268题的源码,ACMer必备

    2. **高级算法**:动态规划(DP)、贪心算法、回溯法、分支限界法、图的深度优先搜索(DFS)、广度优先搜索(BFS)等。 3. **数据结构**:链表、栈、队列、数组、树(二叉树、AVL树、红黑树等)、图、堆、哈夫曼树等...

    ACM算法经典书籍----最全最详细的书籍推荐!

    - 分支限界法 - 近似算法 - 网络流等 #### 四、SICP - **书名**: *Structure and Interpretation of Computer Programs*(简称SICP) - **作者**: Harold Abelson 和 Gerald Jay Sussman - **特点**: 虽然不是...

    深搜宽搜与剪枝分析与poj具体程序举例

    在计算机科学领域,搜索算法是解决问题的关键...对于更复杂的搜索问题,如分支限界搜索、迭代加深搜索、迭代加宽搜索以及A*算法等,需要更深入学习和实践。只有通过不断练习和理解,才能在实际问题中灵活运用这些算法。

    Algorithm-Algorithm.zip

    随着技能的提升,可以进一步学习高级算法,如贪心算法、动态规划、回溯法和分支限界法。此外,图论中的算法,如深度优先搜索(DFS)和广度优先搜索(BFS),以及最小生成树(Prim或Kruskal)、最短路径(Dijkstra或...

    算法设计与分析考试大纲1

    - **分支-限界法**:结合回溯法和搜索空间剪枝,用于求解最优化问题,如旅行商问题。 - **图算法**:包括Dijkstra算法、Floyd-Warshall算法等解决最短路径问题,以及Kruskal和Prim算法解决最小生成树问题。 4. **...

    如何学习ACM,看后受益匪浅

    - **算法**:搜索算法(如回溯和分支限界法)、基于相似或相同子问题的算法(如递推、贪心法和动态规划)是核心。 #### 实践与练习 - **实践**:通过参与在线编程平台(如NOJ、ZOJ、POJ等)的实际项目来加深理解。...

    pojcodefor(1000-1099)

    4. **回溯法与分支限界**:在解决组合优化问题时,如八皇后问题、N皇后问题、数独等,这些方法非常有效。 5. **数据结构**:包括栈、队列、链表、树、图等,如平衡二叉树、AVL树、红黑树等。 6. **字符串处理**:...

    ACM.rar_ACM_acm soj

    2. **算法**:排序(快速排序、归并排序、堆排序)、查找(二分查找、哈希查找)、动态规划、贪心策略、回溯法、分支限界法等。算法是解决问题的核心工具,能够高效地处理数据和解决问题。 3. **数学基础**:离散...

    pku acm 一些代码

    2. **算法**:可能会涉及到排序(如快速排序、归并排序、堆排序)、搜索(如二分查找、深度优先搜索、广度优先搜索)、动态规划、贪心策略、回溯法、分支限界等。 3. **字符串处理**:在ACM中,字符串问题很常见,...

Global site tag (gtag.js) - Google Analytics