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 ) ) ;
0 commit comments