Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function Floyd(roads) {
- var M = {};
- for (var i in roads) {
- M[i] = {};
- for (var j in roads) {
- M[i][j] = distance(i, j);
- }
- }
- for (var p in roads) {
- for (var q in roads) {
- for (var r in roads) {
- M[q][r] = Math.min(M[q][r], M[q][p] + M[p][r]);
- }
- }
- }
- return M;
- }
- var roads = {};
- function makeRoad(from, to, length) {
- function addRoad(from, to) {
- if (!(from in roads))
- roads[from] = {};
- roads[from][to] = length;
- }
- addRoad(from, to);
- addRoad(to, from);
- }
- function makeRoads(start) {
- for (var i = 1; i < arguments.length; i += 2)
- makeRoad(start, arguments[i], arguments[i + 1]);
- }
- // Direct distance.
- function distance(from, to) {
- if (from === to) {
- return 0;
- }
- if (roads[from][to] !== undefined) {
- return roads[from][to];
- }
- return Number.POSITIVE_INFINITY;
- }
- makeRoads("A", "B", 2, "C", 3);
- makeRoads("B", "C", 3, "D", 6);
- makeRoads("C", "D", 3, "E", 5);
- makeRoads("D", "E", 1, "F", 3);
- makeRoads("E", "F", 1);
- function init() {
- var s = 'A--2-B--6-D--3-F \n';
- s = s + ' \\ | /| / \n';
- s = s + ' 3 3 3 1 1 \n';
- s = s + ' \\ | / | / \n';
- s = s + ' C--5-E \n';
- print(s, "pre");
- }
- init();
- var res = Floyd(roads);
- printLn('Distance A --> F: ' + res.A.F);
- printLn('Distance B --> E: ' + res.B.E);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement