/*
Demo graph (example taken from http://p...content-available-to-author-only...t.net/~cazelais/222/dijkstra.pdf):
b d
O-------O
/|\ |\
2/ | \3 | \2
/ | \ 1| \
a O | \ | O z
\ |6 \ | /
3\ | \ | /4
\| \|/
O-------O
c d
*/
class Demo {
static public void main
(String[] args
) { double[][] _m = {
{ 0, 2, 3, 1000, 1000, 1000},
{ 2, 0, 6, 5, 3, 1000},
{ 3, 6, 0, 1000, 1, 1000},
{1000, 5, 1000, 0, 1, 2},
{1000, 3, 1, 1, 0, 4},
{1000, 1000, 1000, 2, 4, 0}
};
int _root = 0;
double mincost, cost[] = new double[_m.length];
int frj[], parent[], w0;
frj = new int[_m.length];
parent = new int[_m.length];
for (int w = 0; w < _m.length; w++) {
parent[w] = -1;
cost[w] = _m[_root][w];
frj[w] = _root;
}
parent[_root] = _root;
cost[_root] = 0;
w0 = 0;
while (true) {
mincost = -1;
for (int w = 0; w < _m.length; w++) {
if (parent[w] != -1 || cost[w] == 0) {
continue;
}
if (mincost > cost[w] || mincost == -1) {
mincost = cost[w0 = w];
}
}
if (mincost == -1) {
break;
}
parent[w0] = frj[w0];
for (int w = 0; w < _m.length; w++) {
if (cost[w] > cost[w0] + _m[w0][w]) {
cost[w] = cost[w0] + _m[w0][w];
frj[w] = w0;
}
}
}
for (int i = 0; i < parent.length; i++) {
System.
out.
print(" " + parent
[i
]); }
}
}
LyoKRGVtbyBncmFwaCAoZXhhbXBsZSB0YWtlbiBmcm9tIGh0dHA6Ly9wLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi50Lm5ldC9+Y2F6ZWxhaXMvMjIyL2RpamtzdHJhLnBkZik6IAoKICAgICAgYiAgICAgICBkCiAgICAgIE8tLS0tLS0tTwogICAgIC98XCAgICAgIHxcCiAgIDIvIHwgXDMgICAgfCBcMgogICAvICB8ICBcICAgMXwgIFwKYSBPICAgfCAgIFwgICB8ICAgTyB6CiAgIFwgIHw2ICAgXCAgfCAgLwogICAzXCB8ICAgICBcIHwgLzQKICAgICBcfCAgICAgIFx8LwogICAgICBPLS0tLS0tLU8KICAgICAgYyAgICAgICBkCiovCmNsYXNzIERlbW8gewogICAgc3RhdGljIHB1YmxpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIGRvdWJsZVtdW10gX20gPSB7CiAgICAgICAgICAgIHsgICAwLCAgICAyLCAgICAzLCAxMDAwLCAxMDAwLCAxMDAwfSwKICAgICAgICAgICAgeyAgIDIsICAgIDAsICAgIDYsICAgIDUsICAgIDMsIDEwMDB9LAogICAgICAgICAgICB7ICAgMywgICAgNiwgICAgMCwgMTAwMCwgICAgMSwgMTAwMH0sCiAgICAgICAgICAgIHsxMDAwLCAgICA1LCAxMDAwLCAgICAwLCAgICAxLCAgICAyfSwKICAgICAgICAgICAgezEwMDAsICAgIDMsICAgIDEsICAgIDEsICAgIDAsICAgIDR9LAogICAgICAgICAgICB7MTAwMCwgMTAwMCwgMTAwMCwgICAgMiwgICAgNCwgICAgMH0KICAgICAgICB9OwogICAgICAgIGludCBfcm9vdCA9IDA7CgogICAgICAgIGRvdWJsZSBtaW5jb3N0LCBjb3N0W10gPSBuZXcgZG91YmxlW19tLmxlbmd0aF07CiAgICAgICAgaW50IGZyaltdLCBwYXJlbnRbXSwgdzA7CgogICAgICAgIGZyaiA9IG5ldyBpbnRbX20ubGVuZ3RoXTsKICAgICAgICBwYXJlbnQgPSBuZXcgaW50W19tLmxlbmd0aF07CgogICAgICAgIGZvciAoaW50IHcgPSAwOyB3IDwgX20ubGVuZ3RoOyB3KyspIHsKICAgICAgICAgICAgcGFyZW50W3ddID0gLTE7CiAgICAgICAgICAgIGNvc3Rbd10gPSBfbVtfcm9vdF1bd107CiAgICAgICAgICAgIGZyalt3XSA9IF9yb290OwogICAgICAgIH0KCiAgICAgICAgcGFyZW50W19yb290XSA9IF9yb290OwogICAgICAgIGNvc3RbX3Jvb3RdID0gMDsKICAgICAgICB3MCA9IDA7CgogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgIG1pbmNvc3QgPSAtMTsKCiAgICAgICAgICAgIGZvciAoaW50IHcgPSAwOyB3IDwgX20ubGVuZ3RoOyB3KyspIHsKICAgICAgICAgICAgICAgIGlmIChwYXJlbnRbd10gIT0gLTEgfHwgY29zdFt3XSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKG1pbmNvc3QgPiBjb3N0W3ddIHx8IG1pbmNvc3QgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICBtaW5jb3N0ID0gY29zdFt3MCA9IHddOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobWluY29zdCA9PSAtMSkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHBhcmVudFt3MF0gPSBmcmpbdzBdOwogICAgICAgICAgICBmb3IgKGludCB3ID0gMDsgdyA8IF9tLmxlbmd0aDsgdysrKSB7CiAgICAgICAgICAgICAgICBpZiAoY29zdFt3XSA+IGNvc3RbdzBdICsgX21bdzBdW3ddKSB7CiAgICAgICAgICAgICAgICAgICAgY29zdFt3XSA9IGNvc3RbdzBdICsgX21bdzBdW3ddOwogICAgICAgICAgICAgICAgICAgIGZyalt3XSA9IHcwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmVudC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgIiArIHBhcmVudFtpXSk7CiAgICAgICAgfQogICAgfQp9Cg==