【转载】搜索题目推荐

原地址:http://www.wumii.com/item/W4Q5yFme

个人觉得这是套比较好的搜索题目,涵盖了基本的经典搜索题型。

-----------------------------------------------------------

格式说明:题目名后面列出个人此题的大致难度(对菜鸟而言)

POJ 1069 -The Bermuda Triangle(难)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1069
题意:用给定三角型填充六边形
解法:此题的思想上精华在于坐标化
ps:传说中比较bt,确实比较bt,主要很容易写错,我ac了,但程序没完全对....

POJ 1077 - Eight(中等,此题不做人生不完整) - AC
http://acm.pku.edu.cn/JudgeOnline/problem?id=1077
题意:八数码问题,超经典题
解法:广搜,A*,双向广搜
相关:http://hi.baidu.com/zfy0701/blog/item/7fcaba2c3d5425e98a1399cf.html
(百度之星的版本,强烈推荐):http://acm.hnu.cn:8080/online/?action=problem&type=show&id=10466&courseid=0

POJ 1084 - Square Destroyer(中等,经典题)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1084
题意:把每个正方型看做集合中的元素,每个木棒看做是一个子集,求最小的子集覆盖
解法:dfs,A*,广搜肯定爆空间

POJ 1167 - The Buses(好难啊)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1167
题意:这道题综合了很多经典的深搜技巧,狂顶
解法:dfs

POJ 1190 - 生日蛋糕(基础,好题)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1190

题意:略
解法:dfs,题偏简单,但做出来还是有些感觉的

POJ 1324 - Holedox Moving(中等)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1324
题意:略
解法:A*,dfs + 上界剪枝,广搜
相关:http://hi.baidu.com/zfy0701/blog/item/7fcaba2c3d5425e98a1399cf.html
http://hi.baidu.com/zfy0701/blog/item/a3c44ecc049b1c1501e92806.html

POJ 1376 - Robot(基础)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1376
题意:略
解法:bfs,A*....

POJ 1475 - Pushing Boxes(中等,很推荐)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1475
题意:推箱子游戏
解法:双重bfs(对箱子bfs 时 对人bfs),A*

POJ 1945 - Power Hungry Cows(??)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1945
题意:略
解法:在一份解题报告中被列为难题,不过好好像写了个很简单很暴力的bfs就过了...速度还是有些慢,暂时想不到好的启发函数

POJ 2044 - Weather Forecast(中等)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2044
题意:略
解法:广搜,dp,深搜
相关:http://hi.baidu.com/zfy0701/blog/item/d7b6490f847948e8ab6457c6.html

POJ 2286 - The Rotation Game(较难)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2286
题意:略
解法:IDA*(迭代加深+上下界强剪
相关:http://hi.baidu.com/zfy0701/blog/item/ce0f802261bfbba14723e871.html

POJ 2308 - Dearboy's Puzzle(中等,但做的人少?)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2308
题意:判断连连看是否有解
解法:DFS + BFS
相关:http://hi.baidu.com/zfy0701/blog/item/c62f41af65aa1fca7cd92afc.html

POJ 2426 Remainder(较难,=)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2426
题意:略,主要是数论部分比较容易让人抓狂
解法:bfs
相关:http://hi.baidu.com/zfy0701/blog/item/7fcaba2c3d5425e98a1399cf.html

POJ 2449 Remmarguts' Date(中等,强烈推荐)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2449
题意:经典问题:K短路
解法:dijkstra+A*,方法很多
相关:http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1144

POJ 2688 - Cleaning Robot(基础)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2688
题意:bfs后转换为tsp问题
解法:bfs+dp,bfs+dfs
相关:http://hi.baidu.com/zfy0701/blog/item/ceb06f261749a6128a82a1b2.html

POJ 2908 - Quantum(中等)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2908
题意:其实就是找单源最短路径
解法:优先队列广搜(即dijkstra),建议用位运算优化

POJ 3074 - Sudoku(中等)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3074
题意:数独游戏,数据比2676强很多,但比3076弱
解法:用dfs回溯基本可过,不过每次应选择可能填的数字最少的格子搜
更快的方法是先转换成exact cover问题,然后用经典dancing links解决,
dancing links原始论文:http://lanl.arxiv.org/PS_cache/cs/pdf/0011/0011047v1.pdf
翻译:http://sqybi.com/works/dlxcn/

POJ 3322 - Bloxorz I(基础) - AC
http://acm.pku.edu.cn/JudgeOnline/problem?id=3322
题意:略,这个游戏本身很好玩(http://jandan.net/2008/01/24/bloxorz.html
解法:广搜,双向广搜
相关:http://hi.baidu.com/zfy0701/blog/item/d7b6490f847948e8ab6457c6.html

POJ 3460 - Booksort(较难,很推荐) - AC
http://acm.pku.edu.cn/JudgeOnline/problem?id=3460
题意:略
解法:IDA*,A*,DFS*
相关:http://hi.baidu.com/zfy0701/blog/item/5c5a404b0f73ecf582025ce4.html

POJ 3523 - The Morning after Halloween(较难)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3523
题意:把所有机器人移到各自的位置,不能相撞或重合
解法:我的状态设计太暴力了:以所有机器人位置表示状态。然后用A*过,排倒数第几,郁闷。谁知道好的状态设计方法告诉我^_^

POJ 3633 - Copying DNA(较难)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3633
题意:一个填充字符串的搜索题
解法:各种搜法皆宜
相关:算法的实现较挑战,我是参考了 http://www.wiskey86.cn/wordpress/?p=54 才搞定的

POJ 3635 full tank?(中等)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3635
题意:最短路变形
解法:广搜
相关:http://hi.baidu.com/hnu_reason/blog/item/086e3dccfc8cb21600e9286b.html

转载于:https://www.cnblogs.com/GBRgbr/p/3230699.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 题目描述:给定一个升序整型数组和一个目标值,搜索数组中是否存在目标值,若存在返回下标,否则返回-1。 解题思路:由于数组是有序的,可以使用二分查找的方法进行搜索。首先确定数组的左右边界,然后计算中间位置的下标,比较中间位置的值和目标值的大小,如果相等则返回下标,如果中间位置的值大于目标值,则在左半部分继续查找,否则在右半部分继续查找,直到找到目标值或者左右边界相遇。 代码实现: class Solution { public: int search(vector<int>& nums, int target) { int left = , right = nums.size() - 1; while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] == target) { return mid; } else if (nums[mid] > target) { right = mid - 1; } else { left = mid + 1; } } return -1; } }; ### 回答2: 二分查找(Binary Search)是一种优秀的查找算法,其时间复杂度为O(logn)。在查找有序数组时,二分查找是一种非常高效的方法。 通过不断地将区间缩小为一半来进行查找,二分查找是一种分治思想的应用。具体来说,对于给定的有序数组nums,在区间[0, n-1]中查找某一元素target。每次找到区间的中间值mid,将mid与target进行比较,如果mid等于target,返回mid的下标。否则,如果mid大于target,在左侧区间[0, mid-1]继续查找;如果mid小于target,在右侧区间[mid+1, n-1]继续查找。如此迭代直至找到target或者区间被缩小为空。 以下是二分查找的简单实现,其中left和right表示当前查找区间的左右边界。 ``` int binarySearch(vector<int>& nums, int target) { int n = nums.size(); int left = 0, right = n - 1; while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] == target) return mid; else if (nums[mid] > target) right = mid - 1; else left = mid + 1; } return -1; } ``` 需要注意的是,该算法要求目标数组必须有序,否则不能保证正确性。另外,在实现时需要注意整型溢出问题,可以使用left + (right - left) / 2来防止溢出。 ### 回答3: 题目描述: 给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。 解题思路: 由于数组有序,可以考虑使用二分查找的方法。二分查找的基本思想是将有序数组一分为二,确认目标值在哪个子数组中,然后继续对子数组进行二分查找。具体实现则是定义一个左指针和一个右指针,不断将数组分成两个子数组,然后判断目标值在哪个子数组中,直到左右指针相遇时结束。 代码实现: class Solution { public: int search(vector<int>& nums, int target) { int left = 0; int right = nums.size() - 1; while (left <= right) { int mid = (left + right) / 2; if (nums[mid] == target) { return mid; } else if (nums[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; } }; 时间复杂度分析: 二分查找的时间复杂度为O(log n),其中n为数组长度。因为每次都将数组分成两个子数组,所以可以得到一个递归式:T(n) = T(n/2) + O(1),根据主定理可以得到其时间复杂度为O(log n)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值