We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
classDijkstraNodeimplementsComparable<DijkstraNode>{privatefinalintX;privatefinalintY;privateintonStep;publicDijkstraNode(intx,inty,intonStep){this.X=x;this.Y=y;this.onStep=onStep;}publicintgetOnStep(){returnonStep;}publicvoidsetOnStep(intonStep){this.onStep=onStep;}publicintgetX(){returnX;}publicintgetY(){returnY;}@OverridepublicintcompareTo(DijkstraNodenode){returnthis.X!=node.getX()?(this.X-node.getX()):(this.Y-node.getY());}}classResult{/* * Complete the 'minimumMoves' function below. * * The function is expected to return an INTEGER. * The function accepts following parameters: * 1. STRING_ARRAY grid * 2. INTEGER startX * 3. INTEGER startY * 4. INTEGER goalX * 5. INTEGER goalY */publicstaticTreeSet<DijkstraNode>findNeighbors(List<String>grid,intx,inty,intonStep,TreeSet<DijkstraNode>alreadyParsed,DijkstraNodegoal){TreeSet<DijkstraNode>set=newTreeSet<>();intn=grid.size();intm=grid.get(0).length();for(inti=x+1;i<n;i++){intj=y;if(grid.get(i).charAt(j)=='X'){break;}DijkstraNodenode=newDijkstraNode(i,j,onStep);if(alreadyParsed.contains(node)){break;}if(node.compareTo(goal)==0){goal.setOnStep(onStep);}set.add(node);}for(inti=x-1;i>=0;i--){intj=y;if(grid.get(i).charAt(j)=='X'){break;}DijkstraNodenode=newDijkstraNode(i,j,onStep);if(alreadyParsed.contains(node)){break;}if(node.compareTo(goal)==0){goal.setOnStep(onStep);}set.add(node);}for(intj=y+1;j<m;j++){inti=x;if(grid.get(i).charAt(j)=='X'){break;}DijkstraNodenode=newDijkstraNode(i,j,onStep);if(alreadyParsed.contains(node)){break;}if(node.compareTo(goal)==0){goal.setOnStep(onStep);}set.add(node);}for(intj=y-1;j>=0;j--){inti=x;if(grid.get(i).charAt(j)=='X'){break;}DijkstraNodenode=newDijkstraNode(i,j,onStep);if(alreadyParsed.contains(node)){break;}if(node.compareTo(goal)==0){goal.setOnStep(onStep);}set.add(node);}returnset;}publicstaticintminimumMoves(List<String>grid,intstartX,intstartY,intgoalX,intgoalY){DijkstraNodenode=newDijkstraNode(startX,startY,0);DijkstraNodegoal=newDijkstraNode(goalX,goalY,0);LinkedList<DijkstraNode>queue=newLinkedList<>();TreeSet<DijkstraNode>alreadyParsed=newTreeSet<>();queue.add(node);alreadyParsed.add(node);while(!queue.isEmpty()){DijkstraNodeprimary=queue.pollFirst();intx=primary.getX();inty=primary.getY();intonStep=primary.getOnStep()+1;TreeSet<DijkstraNode>neighbors=findNeighbors(grid,x,y,onStep,alreadyParsed,goal);if(neighbors.contains(goal)){break;}alreadyParsed.addAll(neighbors);queue.addAll(neighbors);}returngoal.getOnStep();}}
Cookie support is required to access HackerRank
Seems like cookies are disabled on this browser, please enable them to open this website
Castle on the Grid
You are viewing a single comment's thread. Return to all comments →
Java8 using Dijkstra and TreeSet