题目大意:一个农夫抓牛,农夫坐标为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; }
相关推荐
2. **算法**:排序(冒泡、选择、插入、快速、归并等)、搜索(顺序、二分、深度优先、广度优先等)、动态规划(记忆化搜索、状态转移方程)、贪心算法、回溯法、分支限界法等。 3. **字符串处理**:KMP算法、Rabin...
2. **高级算法**:如回溯法、分支限界法、贪心算法、模拟退火、遗传算法等。 3. **数据结构**:链表、栈、队列、树(二叉树、平衡树、B树、Trie树等)、图、哈希表、堆等。 4. **数学知识**:组合数学、数论、线性...
2. **高级算法**:包括动态规划、贪心算法、回溯法、分支限界法等复杂问题的解决方案。 3. **数据结构**:链表、树、图、堆、队列、栈等数据结构的使用场景和实现细节。 4. **字符串处理**:如KMP算法、Manacher's...
5. **回溯法与分支限界**:对于一些组合优化问题,如N皇后问题,代码可能采用回溯法或分支限界法进行搜索。 6. **图论与网络流**:包括深度优先搜索(DFS)、广度优先搜索(BFS)、最大流问题和最小割问题等。 7. ...
5. **回溯法与分支限界**:这两者常用于解决组合优化问题,如八皇后问题、N皇后问题、图着色问题等。通过尝试所有可能的解,并在不合适时回溯,或者通过剪枝减少搜索空间,可以有效地找到解。 6. **图论算法**:...
1. **复杂算法**:动态规划、贪心算法、回溯法、分支限界法、最小生成树(Prim或Kruskal算法)、最短路径(Dijkstra或Floyd算法)等。 2. **高级数据结构**:哈希表、堆(最大堆和最小堆)、 Trie 字典树、B树和B+树...
6. **回溯法与分支限界**:用于解决组合优化问题和图论问题,如八皇后问题、N皇后问题、旅行商问题等。 7. **图论算法**:包括深度优先搜索(DFS)、广度优先搜索(BFS)、最短路径算法(Dijkstra、Floyd-Warshall...
2. **算法设计**:包括排序算法(快速排序、归并排序、冒泡排序等)、查找算法(二分查找、哈希查找等)、动态规划、贪心策略、回溯法、分支限界法等。解题报告会详细阐述每种算法的思想,以及如何在特定题目中应用...
2. **高级算法**:动态规划(DP)、贪心算法、回溯法、分支限界法、图的深度优先搜索(DFS)、广度优先搜索(BFS)等。 3. **数据结构**:链表、栈、队列、数组、树(二叉树、AVL树、红黑树等)、图、堆、哈夫曼树等...
- 分支限界法 - 近似算法 - 网络流等 #### 四、SICP - **书名**: *Structure and Interpretation of Computer Programs*(简称SICP) - **作者**: Harold Abelson 和 Gerald Jay Sussman - **特点**: 虽然不是...
在计算机科学领域,搜索算法是解决问题的关键...对于更复杂的搜索问题,如分支限界搜索、迭代加深搜索、迭代加宽搜索以及A*算法等,需要更深入学习和实践。只有通过不断练习和理解,才能在实际问题中灵活运用这些算法。
随着技能的提升,可以进一步学习高级算法,如贪心算法、动态规划、回溯法和分支限界法。此外,图论中的算法,如深度优先搜索(DFS)和广度优先搜索(BFS),以及最小生成树(Prim或Kruskal)、最短路径(Dijkstra或...
- **分支-限界法**:结合回溯法和搜索空间剪枝,用于求解最优化问题,如旅行商问题。 - **图算法**:包括Dijkstra算法、Floyd-Warshall算法等解决最短路径问题,以及Kruskal和Prim算法解决最小生成树问题。 4. **...
- **算法**:搜索算法(如回溯和分支限界法)、基于相似或相同子问题的算法(如递推、贪心法和动态规划)是核心。 #### 实践与练习 - **实践**:通过参与在线编程平台(如NOJ、ZOJ、POJ等)的实际项目来加深理解。...
4. **回溯法与分支限界**:在解决组合优化问题时,如八皇后问题、N皇后问题、数独等,这些方法非常有效。 5. **数据结构**:包括栈、队列、链表、树、图等,如平衡二叉树、AVL树、红黑树等。 6. **字符串处理**:...
2. **算法**:排序(快速排序、归并排序、堆排序)、查找(二分查找、哈希查找)、动态规划、贪心策略、回溯法、分支限界法等。算法是解决问题的核心工具,能够高效地处理数据和解决问题。 3. **数学基础**:离散...
2. **算法**:可能会涉及到排序(如快速排序、归并排序、堆排序)、搜索(如二分查找、深度优先搜索、广度优先搜索)、动态规划、贪心策略、回溯法、分支限界等。 3. **字符串处理**:在ACM中,字符串问题很常见,...