POJ 3278-Catch That Cow 广度优先搜索BFS
2010-08-20 18:25
429 查看
题目来源:http://acm.pku.edu.cn/JudgeOnline/problem?id=3278
解题报告:
广度优先搜索,对点X,它邻接的点有X-1, X+1, 2×X
这样从N开始对N邻接的点进行搜索,然后再以此广度搜索下去,直到搜索到K
得到的从N到K的最短路径就是 最短时间。
附录:
Catch That Cow
Description
Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting.
* Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute
* Teleporting: FJ can move from any point X to the point 2 × X in a single minute.
If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?
Input
Line 1: Two space-separated integers: N and K
Output
Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.
Sample Input
Sample Output
Hint
The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.
Source
解题报告:
广度优先搜索,对点X,它邻接的点有X-1, X+1, 2×X
这样从N开始对N邻接的点进行搜索,然后再以此广度搜索下去,直到搜索到K
得到的从N到K的最短路径就是 最短时间。
#include <iostream> #include <queue> using namespace std; int visit[200001]; int d[200001]; int BFS(int N, int K) { int s=N; visit[s]=1; //灰色 d[s]=0; queue<int> Q; Q.push(s); while(!Q.empty()) { int u=Q.front(); Q.pop(); int v[3]; v[0]=u-1; v[1]=u+1; v[2]=2*u; for(int i=0;i<3;i++) { if(v[i]>=0 && v[i]<=200001) { if(visit[v[i]]==0) { visit[v[i]]=1; d[v[i]]=d[u]+1; if(v[i]==K) return d[K]; Q.push(v[i]); } } } visit[u]=2; } return 0; } int main() { int N,K; cin >> N >> K; cout << BFS(N,K) << endl; }
附录:
Catch That Cow
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 18412 | Accepted: 5657 |
Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting.
* Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute
* Teleporting: FJ can move from any point X to the point 2 × X in a single minute.
If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?
Input
Line 1: Two space-separated integers: N and K
Output
Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.
Sample Input
5 17
Sample Output
4
Hint
The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.
Source
相关文章推荐
- POJ 3278 Catch that cow 广度优先搜索bfs
- poj 3278 catch that cow (广度优先BFS)
- POJ 3278 Catch That Cow(搜索BFS)
- bfs poj 3278 Catch That Cow+kuangbin搜索 C
- poj 3278 Catch That Cow (bfs搜索)
- 广度优先搜索bfs与抓住那头奶牛(Catch that cow, poj3278)
- poj 3278 Catch That Cow (bfs搜索)
- POJ - 3278 Catch That Cow(BFS)
- POJ 3278 Catch That Cow(这些年追大牛的我们,BFS)
- POJ 3278 Catch That Cow【BFS】
- Catch That Cow(广度搜索BFS,队列)
- 文章标题poj 3278 Catch That Cow(bfs实现)
- POJ-3278-Catch That Cow[基础BFS]
- POJ 3278 Catch That Cow (bfs)
- POJ 3278 Catch That Cow (BFS)
- POJ 3278 Catch That Cow BFS
- POJ 3278 Catch That Cow(BFS)
- poj 3278 || hdu2717 Catch That Cow 人生第一道BFS
- poj 3278 Catch That Cow (BFS)
- Catch That Cow POJ - 3278 BFS入门