fork download
  1. import java.util.*;
  2. import java.io.*;
  3. /*
  4. 원숭이 무빙으로 가던 와중 앞에 장애물이 나타났을 때,
  5. 말 무빙을 치면 최소거리지 않을까
  6. */
  7.  
  8. public class Main
  9. {
  10. static class node /*implements Comparable<node>*/
  11. {
  12. int r;
  13. int c;
  14. int k;
  15. int time;
  16.  
  17. public node(int r , int c , int k , int time)
  18. {
  19. this.r = r;
  20. this.c = c;
  21. this.k = k;
  22. this.time = time;
  23. }
  24.  
  25. /*public int compareTo(node n)
  26. {
  27. return time - n.time;
  28. }*/
  29. }
  30. static int k , r , c , ans;
  31. static int[][] map;
  32. static boolean[][] visit;
  33. static int[] mr = {-1,0,1,0};
  34. static int[] mc = {0,1,0,-1};
  35. static int[] hr = {-2,-2,-1,1,2,2,1,-1};
  36. static int[] hc = {-1,1,2,2,1,-1,-2,-2};
  37. static Queue<node> pq;
  38.  
  39. public static void main (String[] args) throws IOException
  40. {
  41. k = Integer.parseInt(br.readLine());
  42.  
  43. StringTokenizer st = new StringTokenizer(br.readLine());
  44. c = Integer.parseInt(st.nextToken());
  45. r = Integer.parseInt(st.nextToken());
  46. map = new int[r][c];
  47. visit = new boolean[r][c];
  48. pq = new LinkedList<>();
  49.  
  50. for(int i = 0 ; i < r ; i++)
  51. {
  52. st = new StringTokenizer(br.readLine());
  53. for(int j = 0 ; j < c ; j++)
  54. {
  55. map[i][j] = Integer.parseInt(st.nextToken());
  56. }
  57. }
  58.  
  59. visit[0][0] = true;
  60. pq.add(new node(0,0,k,0));
  61.  
  62. bfs();
  63. System.out.println(ans);
  64. }
  65. public static void bfs()
  66. {
  67. while(!pq.isEmpty())
  68. {
  69. node nod = pq.poll();
  70.  
  71. if(nod.r == r-1 && nod.c == c-1)
  72. {
  73. ans = nod.time;
  74. return;
  75. }
  76.  
  77. for(int i = 0 ; i < 4 ; i++)
  78. {
  79. int nr = nod.r + mr[i];
  80. int nc = nod.c + mc[i];
  81.  
  82. if(nr >= 0 && nc >= 0 && nr < r && nc < c)
  83. {
  84. if(map[nr][nc] == 0 && !visit[nr][nc])
  85. {
  86. System.out.println("걷기 선택 before: "+nod.r+","+nod.c+" // after: "+nr+","+nc);
  87. visit[nr][nc] = true;
  88. pq.add(new node(nr,nc,nod.k,nod.time+1));
  89. }
  90. if(nod.k > 0 /*&& map[nr][nc] == 1*/) //가긴가네
  91. {
  92. horse_moving(nod.r,nod.c,nod.k,nod.time);
  93. }
  94. }
  95. }
  96. }
  97.  
  98. ans = -1;
  99. }
  100. public static void horse_moving(int r , int c , int k , int time)
  101. {
  102. for(int i = 0 ; i < 8 ; i++)
  103. {
  104. int nr = r + hr[i];
  105. int nc = c + hc[i];
  106. System.out.println("점프 선택");
  107. if(nr >= 0 && nc >= 0 && nr < r && nc < c)
  108. {
  109. if(!visit[nr][nc] && map[nr][nc] == 0)
  110. {
  111. System.out.println("점프 선택 before: "+r+","+c+" // after: "+nr+","+nc);
  112. visit[nr][nc] = true;
  113. pq.add(new node(nr,nc,k-1,time+1));
  114. }
  115.  
  116. }
  117. }
  118. }
  119. }
Success #stdin #stdout 0.19s 50252KB
stdin
1
4 4
0 0 0 0
1 0 0 0
0 0 1 0
0 1 0 0
stdout
걷기 선택 before: 0,0 // after: 0,1
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
걷기 선택 before: 0,1 // after: 0,2
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
걷기 선택 before: 0,1 // after: 1,1
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
걷기 선택 before: 0,2 // after: 0,3
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
걷기 선택 before: 0,2 // after: 1,2
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
걷기 선택 before: 1,1 // after: 2,1
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
걷기 선택 before: 0,3 // after: 1,3
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
걷기 선택 before: 2,1 // after: 2,0
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
걷기 선택 before: 1,3 // after: 2,3
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
걷기 선택 before: 2,0 // after: 3,0
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
걷기 선택 before: 2,3 // after: 3,3
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
점프 선택
6