Skip to content

Instantly share code, notes, and snippets.

@skhokhlov
Last active December 18, 2015 08:39
Show Gist options
  • Save skhokhlov/8f0060e215516b735d2a to your computer and use it in GitHub Desktop.
Save skhokhlov/8f0060e215516b735d2a to your computer and use it in GitHub Desktop.
'use strict';
var fs = require('fs');
/**
* Dijkstra algorithm
*
* @param g {Array}
* @param start {Number}
*/
function Dijkstra(m, s) {
var visited = new Array(m.length).fill(false),
price = new Array(m.length).fill(Infinity);
price[s] = 0;
function minNode() {
var n;
for (let i = 0; i < m.length; i++) {
if (!visited[i] && (n === undefined || price[i] < price[n])) {
n = i;
}
}
return n;
}
var n;
while ((n = minNode()) !== undefined) {
visited[n] = true;
for (let i = 0; i < m.length; i++) {
if (m[n][i] !== Infinity) {
price[i] = Math.min(price[i], price[n] + m[n][i]);
}
}
}
return price;
}
fs.readFile('input.txt', 'utf-8', function (err, data) {
if (err) {
throw new Error(err);
}
data = data.split('\n');
let matrix = [];
for (let i in data) {
if (data[i] != '') {
matrix.push(data[i].split(' '));
}
}
for (let i in matrix) {
for (let j in matrix[i]) {
matrix[i][j] = Number(matrix[i][j]);
}
}
console.log(Dijkstra(matrix, 0)[1]);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment