Skip to content

Commit a781cfa

Browse files
committed
create dijkstra_js
1 parent 840114d commit a781cfa

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

javascript/dijkstra_search.js

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const { getGraphDijkstra } = require("./utils");
2+
3+
const data = getGraphDijkstra()
4+
5+
/**
6+
* @description - Алгоритм Дейкстры: кратчайший путь из одного источника. Сложность O(n*n*n)
7+
* Алгоритм работает таким образом, что ищет достижение каждой вершины максимально простым по весу
8+
* @param {Array} graphs
9+
* @param {Number} start - входная точка
10+
* @param {Number} end - искомая конечная точка
11+
*/
12+
function Dijkstra(graphs, start = 0, end = 0) {
13+
const rows = graphs.length,
14+
cols = graphs[0].length;
15+
16+
if (rows !== cols || start >= rows) {
17+
return new Error('Ошибка матрицы смежности или ошибка исходной точки')
18+
}
19+
20+
const cost = new Array(rows).fill(data.const.MAX_INTEGER);
21+
cost[start] = 0;
22+
23+
for (let i = 0; i < rows; i++) {
24+
if (cost[i] < data.const.MAX_INTEGER) {
25+
for (let j = 0; j < cols; j++) {
26+
if (graphs[i][j] + cost[i] < cost[j]) {
27+
cost[j] = graphs[i][j] + cost[i];
28+
}
29+
}
30+
}
31+
}
32+
return end ? cost[end] : cost
33+
}
34+
35+
console.log('Поиск стоимостей путей из 0 узла во все остальные:', Dijkstra(data.items, 0));
36+
console.log('Поиск стоимостей путей из 1 узла во все остальные:', Dijkstra(data.items, 1));
37+
console.log('Поиск стоимости из 1 узла в 3 узел:', Dijkstra(data.items, 1, 3));

javascript/utils.js

+18
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,22 @@ module.exports.getGraph = () => {
1717
}
1818

1919
return graph
20+
}
21+
22+
module.exports.getGraphDijkstra = () => {
23+
const MAX_INTEGER = Infinity;
24+
const MIN_INTEGER = 0;
25+
return {
26+
const: {
27+
MAX_INTEGER,
28+
MIN_INTEGER
29+
},
30+
items: [
31+
[MIN_INTEGER, 9, 2, MAX_INTEGER, 6],
32+
[9, MIN_INTEGER, 3, MAX_INTEGER, MAX_INTEGER],
33+
[2, 3, MIN_INTEGER, 5, MAX_INTEGER],
34+
[MAX_INTEGER, MAX_INTEGER, 5, MIN_INTEGER, 1],
35+
[6, MAX_INTEGER, MAX_INTEGER, 1, MIN_INTEGER]
36+
]
37+
}
2038
}

0 commit comments

Comments
 (0)