Advertisement
Guest User

Untitled

a guest
Mar 26th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.33 KB | None | 0 0
  1. int[] start = new int[2] ;
  2. int[] exit = new int[2];
  3. char[][] maze={ {'H','H','H','H','H','H','H','H','H','H','H','H','H','H','H','H'},
  4. {'H','E','.','.','.','H','.','H','.','.','.','.','.','.','H','H'},
  5. {'H','.','H','H','H','.','.','.','.','H','.','H','H','.','.','H'},
  6. {'H','.','H','H','H','.','H','H','.','H','.','H','H','.','H','H'},
  7. {'H','.','.','.','.','.','.','H','.','H','.','.','.','.','H','H'},
  8. {'H','.','H','H','.','.','H','H','.','H','.','H','H','.','.','H'},
  9. {'H','H','.','H','H','.','.','.','.','H','.','.','.','.','H','H'},
  10. {'H','.','.','H','H','.','H','H','H','.','.','H','H','.','H','H'},
  11. {'H','H','.','.','.','.','.','S','.','H','.','.','.','.','H','H'},
  12. {'H','H','H','.','H','H','.','H','.','H','.','H','H','.','.','H'},
  13. {'H','.','H','.','.','.','.','H','.','H','.','H','.','H','.','H'},
  14. {'H','H','.','.','H','H','H','H','.','.','.','H','.','H','.','H'},
  15. {'H','.','H','H','H','.','H','H','H','.','H','.','.','.','.','H'},
  16. {'H','.','.','.','.','.','.','.','.','.','H','.','H','.','H','H'},
  17. {'H','H','H','.','H','.','H','.','H','.','H','.','H','.','H','H'},
  18. {'H','H','H','H','H','H','H','H','H','H','H','H','H','H','H','H'},};
  19. NodeInfo[][] graph = new NodeInfo[maze.length][maze.length];
  20. boolean[][] traversed= new boolean[maze.length][maze.length] ;
  21. for(int r=0;r<maze.length;r++)
  22. {
  23. for(int c=0;c<maze[r].length;c++)
  24. {
  25. if(maze[r][c]=='E')
  26. {
  27. start[0]=r;
  28. start[1]=c;
  29. }
  30. if(maze[r][c]=='S')
  31. {
  32. exit[0]=r;
  33. exit[1]=c;
  34. }
  35. if(maze[r][c]!='H')
  36. {
  37. traversed[r][c]=true;
  38. int[] tempo = {r,c} ;
  39. graph[r][c]=new NodeInfo(tempo);
  40. }
  41. else
  42. {
  43. traversed[r][c]=false;
  44. int[] tempo = {r,c} ;
  45. graph[r][c]=new NodeInfo() ;
  46. }
  47. }
  48. }
  49. boolean canSolve = false;
  50. int minDist =Integer.MAX_VALUE ;
  51. NodeInfo starter = new NodeInfo(start) ;
  52. starter.setDist(0);
  53. PriorityQueue<NodeInfo> q = new PriorityQueue<NodeInfo>(10, new Comparator<NodeInfo>()
  54. {
  55. public int compare( NodeInfo node1, NodeInfo node2)
  56. {
  57. if(node1.getDist()<node2.getDist()) return -1;
  58. if(node1.getDist()>node2.getDist()) return 1;
  59. return 0;
  60. }
  61. }) ;
  62. starter.setPred(null) ;
  63. q.add(starter) ;
  64. while(!q.isEmpty())
  65. {
  66. traversed[q.peek().getRay()[0]][q.peek().getRay()[1]]=false;
  67. if(maze[q.peek().getRay()[0]][q.peek().getRay()[1]]=='S')
  68. {
  69. canSolve = true;
  70. int r,c;
  71. r=q.peek().getRay()[0];
  72. c=q.peek().getRay()[1];
  73.  
  74. if(minDist>graph[r][c].getDist())
  75. minDist=graph[r][c].getDist();
  76. }
  77. if(traversed[q.peek().getRay()[0]][q.peek().getRay()[1]+1]==true)
  78. {
  79. int r,c;
  80. r=q.peek().getRay()[0];
  81. c=q.peek().getRay()[1]+1;
  82. graph[r][c].setDist(q.peek().getDist()+graph[r][c].getEdge());
  83. graph[r][c].setPred(graph[q.peek().getRay()[0]][q.peek().getRay()[1]].getRay());
  84. q.add(graph[r][c]);
  85.  
  86. }
  87. if(traversed[q.peek().getRay()[0]][q.peek().getRay()[1]-1]==true)
  88. {
  89. int r,c;
  90. r=q.peek().getRay()[0];
  91. c=q.peek().getRay()[1]-1;
  92. graph[r][c].setDist(q.peek().getDist()+graph[r][c].getEdge());
  93. graph[r][c].setPred(graph[q.peek().getRay()[0]][q.peek().getRay()[1]].getRay());
  94. q.add(graph[r][c]);
  95.  
  96. }
  97. if(traversed[q.peek().getRay()[0]+1][q.peek().getRay()[1]]==true)
  98. {
  99. int r,c;
  100. r=q.peek().getRay()[0]+1;
  101. c=q.peek().getRay()[1];
  102. graph[r][c].setDist(q.peek().getDist()+graph[r][c].getEdge());
  103. graph[r][c].setPred(graph[q.peek().getRay()[0]][q.peek().getRay()[1]].getRay());
  104. q.add(graph[r][c]);
  105.  
  106. }
  107. if(traversed[q.peek().getRay()[0]-1][q.peek().getRay()[1]]==true)
  108. {
  109. int r,c;
  110. r=q.peek().getRay()[0]-1;
  111. c=q.peek().getRay()[1];
  112. graph[r][c].setDist(q.peek().getDist()+graph[r][c].getEdge());
  113. graph[r][c].setPred(graph[q.peek().getRay()[0]][q.peek().getRay()[1]].getRay());
  114. q.add(graph[r][c]);
  115.  
  116. }
  117. q.poll() ;
  118. }
  119.  
  120. if(minDist!=Integer.MAX_VALUE)
  121. {
  122. LinkedList<int[]> steps = new LinkedList();
  123. System.out.println(" Number Of Steps Taken : "+minDist + "n Maze is solvable : " + canSolve) ;
  124. int r,c;
  125. r=exit[0];
  126. c=exit[1];
  127. steps.add(exit);
  128. boolean griph=true;
  129. while(griph)
  130. {
  131.  
  132. if(griph)
  133. {
  134. int rows=r;
  135. int cols=c;
  136. if(graph[r][c].getPred()==null)
  137. {
  138. griph=false;
  139. }
  140. if(griph==true)
  141. {
  142. if(maze[r][c]=='.')
  143. {
  144. maze[r][c]='x';
  145. }
  146. steps.addLast(graph[r][c].getPred());
  147. r=graph[rows][cols].getPred()[0];
  148. c=graph[rows][cols].getPred()[1];
  149. }
  150. }
  151.  
  152. }
  153. while(!steps.isEmpty())
  154. {
  155. System.out.println(Arrays.toString(steps.pollLast())+" ");
  156. }
  157. }
  158. else
  159. System.out.println("Maze is Solvable : "+canSolve) ;
  160.  
  161. for(int r= 0; r<maze.length;r++)
  162. {
  163. for(int c= 0; c<maze.length;c++)
  164. {
  165. System.out.print(maze[r][c]+" ");
  166. if(c+1==maze.length)
  167. System.out.println();
  168. }
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement