深度优先搜索实现抓牛问题

x33g5p2x  于2022-06-29 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(385)

一 原问题链接

3278 -- Catch That Cow

http://poj.org/problem?id=3278

二 输入和输出

1 输入

两个数,第1个数代表农夫的位置,第2个数代表牛的位置。

2 输出

农夫抓牛的最小步数

三 输入和输出样例

1 输入样例

5 17

2 输出样例

4

四 代码

  1. package graph.poj3278;
  2. import java.util.Scanner;
  3. public class POJ3278 {
  4. static private int n;
  5. static private int k;
  6. /**
  7. * 功能描述:深度优先算法
  8. *
  9. * @param t 牛的位置
  10. * @return 需要的部署
  11. * @author cakin
  12. * @date 2022/6/28
  13. * @description:
  14. */
  15. static int dfs(int t) {
  16. if (t <= n) // 人后退步数
  17. return n - t;
  18. if (t % 2 != 0) // 人在 t+1 位置,再走一步到牛的位置, 人在 t-1 位置,再走一步到牛的位置
  19. return Math.min(dfs(t + 1) + 1, dfs(t - 1) + 1);
  20. else // 人在 t/2 的位置,再走一步到牛的位置,人直接从 n 走到 t的步数
  21. return Math.min(dfs(t / 2) + 1, t - n);
  22. }
  23. public static void main(String[] args) {
  24. Scanner scanner = new Scanner(System.in);
  25. n = scanner.nextInt();
  26. k = scanner.nextInt();
  27. int ans = 0;
  28. if (n == 0) { // 特殊情况判断,很重要
  29. n = 1;
  30. ans = 1;
  31. }
  32. ans += dfs(k);
  33. System.out.println(ans);
  34. }
  35. }

五 测试结果

绿色为输入,白色为输出

相关文章