POJ3278 Catch That Cow题解 广度优先搜索+限定解空间
来源:互联网 发布:mysql 查看版本号 编辑:程序博客网 时间:2024/06/05 23:41
题目大意:直线上的两个坐标N和K,其中从N出发到达K,可以变换为+1、-1或者*2,每变换一次坐标,需要花费一分钟,求最短时间到达K。
分析:由于要求最优解,我们首先考虑使用BFS,相当于每次入队要花费一分钟,所以通过BFS到达K的时候,就是最优解。但是注意这题需要限定新加入队列进行下一轮搜索的节点的坐标,因为题目中要求是0-100000,所以进行控制,如果不进行控制的话,那么可以无限扩大,以至于爆掉空间也有可能获取不到最优解。
代码:
import java.util.*;import java.io.*;public class Main {static final int maxn = 100005;static int n, k;static int ans;static ArrayDeque<Node> que = new ArrayDeque<Node>();static boolean vis[] = new boolean[maxn];public static int bfs() {que.clear();Arrays.fill(vis, false);que.addLast(new Node(n, 0));vis[n] = true;while(!que.isEmpty()) {Node temp = que.pollFirst();if(temp.x == k) {return temp.t;}if(temp.x + 1 >= 0 && temp.x + 1 < maxn && !vis[temp.x + 1]) {vis[temp.x + 1] = true;que.addLast(new Node(temp.x + 1, temp.t + 1));}if(temp.x - 1 >= 0 && temp.x - 1 < maxn && !vis[temp.x - 1]) {vis[temp.x - 1] = true;que.addLast(new Node(temp.x -1, temp.t + 1));}if(temp.x * 2 >= 0 && temp.x * 2 < maxn && !vis[temp.x * 2]) {vis[temp.x * 2] = true;que.addLast(new Node(temp.x * 2, temp.t + 1));}}return -1;}public static void main(String[] args) {InputReader in = new InputReader(System.in);PrintWriter out = new PrintWriter(System.out);n = in.nextInt();k = in.nextInt();ans = bfs();out.println(ans);out.close();}static class Node {int x, t;public Node() {}public Node(int x, int t) {this.x = x;this.t = t;}}static class InputReader {public BufferedReader reader;public StringTokenizer tokenizer;public InputReader(InputStream stream) {reader = new BufferedReader(new InputStreamReader(stream), 32768);tokenizer = null;}public String next() {try {while(tokenizer == null || !tokenizer.hasMoreTokens()) {tokenizer = new StringTokenizer(reader.readLine());} } catch (IOException e) {throw new RuntimeException(e);}return tokenizer.nextToken();}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}}}
阅读全文
0 0
- POJ3278 Catch That Cow题解 广度优先搜索+限定解空间
- POJ3278 - Catch That Cow - 广度优先搜索
- Catch That Cow-广度优先搜索-POJ3278
- POJ3278 Catch That Cow 广度优先搜索版
- poj3278 hdu2717 Catch That Cow 广度优先搜索
- (广度优先搜索)算法题-poj3278 Catch That Cow
- POJ3278(BFS广度优先搜索)之Catch That Cow
- 广度优先搜索bfs与抓住那头奶牛(Catch that cow, poj3278)
- poj3287 Catch That Cow(广度优先搜索)
- Catch That Cow-----广度优先搜索
- Catch That Cow(广度优先搜索_bfs)
- Catch That Cow广度优先搜索
- POJ 3278 Catch That Cow(BFS广度优先搜索)
- POJ 3278-Catch That Cow 广度优先搜索BFS
- poj 3278 Catch That Cow 广度优先搜索
- Catch That Cow POJ 3278 BFS 广度优先搜索
- POJ-3278 catch that cow 广度优先搜索
- POJ-3278 Catch That Cow【广度优先搜索】
- drawerLayout的侧拉监听事件
- 15-EMM Procedure 5. Periodic TAU
- redis基本知识
- Laravel创建数据库表结构
- Mapreduce的性能调优
- POJ3278 Catch That Cow题解 广度优先搜索+限定解空间
- [绍棠] ReactNative : ignoring return value of function declared with warn_unused_result attribute
- mysql(6)-mycat中间件
- 16-EMM Procedure 6. Handover without TAU
- Linux Oracle服务启动&停止脚本与开机自启动
- Tensorflow实战学习(二十五)【自编码器】
- Linux命令(26)——rename命令
- 17-EMM Procedure 6. Handover without TAU
- LeetCode.331 Verify Preorder Serialization of a Binary Tree