Advertisement
Guest User

priorityqueueasdf

a guest
Jan 20th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.02 KB | None | 0 0
  1. import java.io.File;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import java.util.*;
  6. public class visitfj3 {
  7.  
  8. static int N;
  9. public static void main(String[] args) throws IOException {
  10. Scanner in = new Scanner(new File("visitfj.in"));
  11. N = in.nextInt();
  12. int t = in.nextInt();
  13. int[][] squares = new int[N][N];
  14. Node[][][] nodes = new Node[N][N][3];
  15. int counter = 0;
  16.  
  17. for(int i=0; i<N; i++) {
  18. for(int j=0; j<N; j++) {
  19. squares[i][j] = in.nextInt();
  20. for(int k=0; k<3; k++) {
  21. nodes[i][j][k] = new Node(squares[i][j], counter, k);
  22. }
  23. counter++;
  24. }
  25. }
  26.  
  27. for(int i=0; i<N; i++) {
  28. for(int j=0; j<N; j++) {
  29. for(int k=0; k<3; k++) {
  30. if(j>0) {
  31. nodes[i][j][k].addNeighbor(nodes[i][j-1][(k+1)%3]);
  32. }
  33. if(j<N-1) {
  34. nodes[i][j][k].addNeighbor(nodes[i][j+1][(k+1)%3]);
  35. }
  36. if(i>0) {
  37. nodes[i][j][k].addNeighbor(nodes[i-1][j][(k+1)%3]);
  38. }
  39. if(i<N-1) {
  40. nodes[i][j][k].addNeighbor(nodes[i+1][j][(k+1)%3]);
  41. }
  42. }
  43. }
  44. }
  45.  
  46. Queue<Node> queue = new PriorityQueue<>();
  47. nodes[0][0][0].setValue(0);
  48. queue.add(nodes[0][0][0]);
  49. while(!queue.isEmpty()) {
  50. for(Node node : queue.peek().neighbors) {
  51. if(node.getValue() == -1) {
  52. queue.add(node);
  53. node.setValue(queue.peek().getValue() + t + (node.getStep() % 3 == 0 ? node.getTime() : 0));
  54. }
  55. else {
  56. if(node.getValue() > queue.peek().getValue() + t + (node.getStep() % 3 == 0 ? node.getTime() : 0)) {
  57. queue.add(node);
  58. node.setValue(queue.peek().getValue() + t + (node.getStep() % 3 == 0 ? node.getTime() : 0));
  59. }
  60. }
  61. }
  62. queue.poll();
  63. }
  64.  
  65. PrintWriter out = new PrintWriter(new FileWriter("visitfj.out"));
  66. out.print(Math.min(nodes[N-1][N-1][2].getValue(), Math.min(nodes[N-1][N-1][1].getValue(), nodes[N-1][N-1][0].getValue())));
  67. out.close();
  68.  
  69. in.close();
  70. }
  71.  
  72.  
  73. public static class Node implements Comparable<Node>{
  74. private int value;
  75. private int index;
  76. private int time;
  77. private List<Node> neighbors;
  78. private int step;
  79. public Node(int time, int index, int step) {
  80. this.time = time;
  81. this.index = index;
  82. this.step = step;
  83. neighbors = new ArrayList<>();
  84. value = -1;
  85. }
  86. public int getValue() {
  87. return value;
  88. }
  89. public void setValue(int value) {
  90. this.value = value;
  91. }
  92. public int getIndex() {
  93. return index;
  94. }
  95. public void setIndex(int index) {
  96. this.index = index;
  97. }
  98. public int getTime() {
  99. return time;
  100. }
  101. public void setTime(int time) {
  102. this.time = time;
  103. }
  104. public List<Node> getNeighbors() {
  105. return neighbors;
  106. }
  107. public void addNeighbor(Node node) {
  108. neighbors.add(node);
  109. }
  110. public void addNeighbors(Node...nodes) {
  111. for(Node node : nodes) {
  112. neighbors.add(node);
  113. }
  114. }
  115. public int getStep() {
  116. return step;
  117. }
  118. public void setStep(int step) {
  119. this.step = step;
  120. }
  121.  
  122. @Override
  123. public int compareTo(Node o) {
  124. return this.value - o.getValue();
  125. }
  126.  
  127. }
  128.  
  129.  
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement