import java.util.Arrays;
public class Main {
private static final int INFINITY
= Integer.
MAX_VALUE;
public static void dijkstra(int[][] graph, int startVertex) {
int numVertices = graph.length;
int[] distances = new int[numVertices];
boolean[] visited = new boolean[numVertices];
Arrays.
fill(distances, INFINITY
); distances[startVertex] = 0;
for (int i = 0; i < numVertices - 1; i++) {
int currentVertex = findMinDistance(distances, visited);
visited[currentVertex] = true;
for (int j = 0; j < numVertices; j++) {
if (!visited[j] && graph[currentVertex][j] != 0 && distances[currentVertex] != INFINITY
&& distances[currentVertex] + graph[currentVertex][j] < distances[j]) {
distances[j] = distances[currentVertex] + graph[currentVertex][j];
}
}
}
System.
out.
println("Najkrótsza ścieżka od wierzchołka " + startVertex
+ " do pozostałych wierzchołków:"); for (int i = 0; i < numVertices; i++) {
System.
out.
println("Do wierzchołka " + i
+ ": " + distances
[i
]); }
}
private static int findMinDistance(int[] distances, boolean[] visited) {
int minDistance = INFINITY;
int minVertex = -1;
for (int i = 0; i < distances.length; i++) {
if (!visited[i] && distances[i] < minDistance) {
minDistance = distances[i];
minVertex = i;
}
}
return minVertex;
}
public static void main
(String[] args
) { int[][] graph = {
{ 0, 4, 0, 0, 0, 0, 0, 8, 0 },
{ 4, 0, 8, 0, 0, 0, 0, 11, 0 },
{ 0, 8, 0, 7, 0, 4, 0, 0, 2 },
{ 0, 0, 7, 0, 9, 14, 0, 0, 0 },
};
int startVertex = 0;
dijkstra(graph, startVertex);
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheXM7CgpwdWJsaWMgY2xhc3MgTWFpbiB7CiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSU5GSU5JVFkgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgZGlqa3N0cmEoaW50W11bXSBncmFwaCwgaW50IHN0YXJ0VmVydGV4KSB7CiAgICAgICAgaW50IG51bVZlcnRpY2VzID0gZ3JhcGgubGVuZ3RoOwogICAgICAgIGludFtdIGRpc3RhbmNlcyA9IG5ldyBpbnRbbnVtVmVydGljZXNdOwogICAgICAgIGJvb2xlYW5bXSB2aXNpdGVkID0gbmV3IGJvb2xlYW5bbnVtVmVydGljZXNdOwoKICAgICAgICBBcnJheXMuZmlsbChkaXN0YW5jZXMsIElORklOSVRZKTsKICAgICAgICBkaXN0YW5jZXNbc3RhcnRWZXJ0ZXhdID0gMDsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1WZXJ0aWNlcyAtIDE7IGkrKykgewogICAgICAgICAgICBpbnQgY3VycmVudFZlcnRleCA9IGZpbmRNaW5EaXN0YW5jZShkaXN0YW5jZXMsIHZpc2l0ZWQpOwogICAgICAgICAgICB2aXNpdGVkW2N1cnJlbnRWZXJ0ZXhdID0gdHJ1ZTsKCiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtVmVydGljZXM7IGorKykgewogICAgICAgICAgICAgICAgaWYgKCF2aXNpdGVkW2pdICYmIGdyYXBoW2N1cnJlbnRWZXJ0ZXhdW2pdICE9IDAgJiYgZGlzdGFuY2VzW2N1cnJlbnRWZXJ0ZXhdICE9IElORklOSVRZCiAgICAgICAgICAgICAgICAgICAgICAgICYmIGRpc3RhbmNlc1tjdXJyZW50VmVydGV4XSArIGdyYXBoW2N1cnJlbnRWZXJ0ZXhdW2pdIDwgZGlzdGFuY2VzW2pdKSB7CiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2VzW2pdID0gZGlzdGFuY2VzW2N1cnJlbnRWZXJ0ZXhdICsgZ3JhcGhbY3VycmVudFZlcnRleF1bal07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTmFqa3LDs3RzemEgxZtjaWXFvGthIG9kIHdpZXJ6Y2hvxYJrYSAiICsgc3RhcnRWZXJ0ZXggKyAiIGRvIHBvem9zdGHFgnljaCB3aWVyemNob8WCa8OzdzoiKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVZlcnRpY2VzOyBpKyspIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEbyB3aWVyemNob8WCa2EgIiArIGkgKyAiOiAiICsgZGlzdGFuY2VzW2ldKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgaW50IGZpbmRNaW5EaXN0YW5jZShpbnRbXSBkaXN0YW5jZXMsIGJvb2xlYW5bXSB2aXNpdGVkKSB7CiAgICAgICAgaW50IG1pbkRpc3RhbmNlID0gSU5GSU5JVFk7CiAgICAgICAgaW50IG1pblZlcnRleCA9IC0xOwoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpc3RhbmNlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoIXZpc2l0ZWRbaV0gJiYgZGlzdGFuY2VzW2ldIDwgbWluRGlzdGFuY2UpIHsKICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2VzW2ldOwogICAgICAgICAgICAgICAgbWluVmVydGV4ID0gaTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG1pblZlcnRleDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgaW50W11bXSBncmFwaCA9IHsKICAgICAgICAgICAgICAgIHsgMCwgNCwgMCwgMCwgMCwgMCwgMCwgOCwgMCB9LAogICAgICAgICAgICAgICAgeyA0LCAwLCA4LCAwLCAwLCAwLCAwLCAxMSwgMCB9LAogICAgICAgICAgICAgICAgeyAwLCA4LCAwLCA3LCAwLCA0LCAwLCAwLCAyIH0sCiAgICAgICAgICAgICAgICB7IDAsIDAsIDcsIDAsIDksIDE0LCAwLCAwLCAwIH0sCiAgICAgICAgfTsKCiAgICAgICAgaW50IHN0YXJ0VmVydGV4ID0gMDsKICAgICAgICBkaWprc3RyYShncmFwaCwgc3RhcnRWZXJ0ZXgpOwogICAgfQp9Cg==