Untitled
unknown
java
2 years ago
2.8 kB
2
Indexable
import java.io.*; import java.math.*; import java.security.*; import java.text.*; import java.util.*; import java.util.concurrent.*; import java.util.function.*; import java.util.regex.*; import java.util.stream.*; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; class Result { /* * Complete the 'get_shortest_time' function below. * * The function is expected to return a LONG_INTEGER. * The function accepts following parameters: * 1. STRING startNode * 2. STRING endNode * 3. 2D_STRING_ARRAY paths */ public static long get_shortest_time(String startNode, String endNode, List<List<String>> paths) { Map<String, List<IdAndLen>> edges = new HashMap<>(); for(List<String> path : paths) { List<IdAndLen> neighbors = edges.getOrDefault(path.get(0), new ArrayList<>()); neighbors.add(new IdAndLen(path.get(1), Long.parseLong(path.get(2)))); edges.put(path.get(0), neighbors); } // printMap(edges); PriorityQueue<PathlenAndId> pq = new PriorityQueue(10, (o1, o2) -> { if (((PathlenAndId)o1).pathlen < ((PathlenAndId)o2).pathlen) { return -1; } else if (((PathlenAndId)o1).pathlen == ((PathlenAndId)o2).pathlen) { return 0; } else { return 1; } }); if (edges.get(startNode) != null) { pq.add(new PathlenAndId(0, startNode)); } Set<String> visitedNode = new HashSet<>(); while (!pq.isEmpty()) { PathlenAndId node = pq.remove(); if (visitedNode.contains(node.id)) { continue; } if (node.id == endNode) { return node.pathlen; } visitedNode.add(node.id); for(IdAndLen edge : edges.getOrDefault(node.id, new ArrayList<>())) { pq.add(new PathlenAndId(node.pathlen + edge.edgeLen, edge.id)); } } return -1; } static class PathlenAndId { public long pathlen; public String id; public PathlenAndId(long pathlen, String id) { this.pathlen = pathlen; this.id = id; } public String toString() { return "(id:" + this.id + ", " + "pathLen:" + this.pathlen + ")"; } } static class IdAndLen { public String id; public long edgeLen; public IdAndLen(String id, long edgeLen) { this.id = id; this.edgeLen = edgeLen; } public String toString() { return "(id:" + this.id + ", " + "len:" + this.edgeLen + ")"; } } }
Editor is loading...