Проблема с алгоритмом Дейкстры

При вводе матрицы

0, 9, 2, 0, 6,

9, 0, 3, 0, 0,

2, 3, 0, 5, 0,

0, 0, 5, 0, 3,

6, 0, 0, 1, 0,

и значения (отвечает за вершину с которой будет искаться минимальное расстояние):

D

Выдает не правильный ответ:

7 Infinity 5 0 1

Хотя должно получиться

7 8 5 0 1

Или даже так

0 2 4 0 6

2 0 1 0 0

4 1 0 5 1

0 0 5 0 3

6 0 1 3 0

E

Выводит в общем это 6 1 3 0

Как исправить код чтобы работало?

const readline = require('readline')
    
    const rl = readline.createInterface({input: process.stdin, output: process.stdout})
    let arr = []
    let arrChars = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
    rl.question('Matrix length: ', async (userInput) => { // первый вызов програмы для того чтобы задать размер матрицы
        const arrayLength = await userInput[0]
        const arrayWidth = await userInput[0]
        matrix(arrayLength, arrayWidth)
    })
    
    const matrix = (arrayLength , arrayWidth) => { 
        if(arrayLength === 0){ // если длина массива становиться 0, то производит вызов функции отвечающей за расчет данных
            rl.question('Search way: ', async (userInput) => { // первый вызов програмы для того чтобы задать размер матрицы
                let variable = await userInput[0]
                let number
                arrChars.filter( (char, i) => {
                    if(variable.toLocaleLowerCase() === char.toLocaleLowerCase()){ // делаем сразу ловеркейс, чтобы при проверке не выдавало ошибку если пользователь ввел вместо большой буквы, маленькую
                        number = i
                    }
                })
                console.log(number)
                degree(number)
            })
        }
        if(arrayLength > 0){ // производит запись пока значение длины массива больше 0
            rl.question(`Row: ${arrayLength}, enter numbers separated by spaces: `, async (userInput) => {
                const subArray = await userInput.split(' ') // делает из строки массив
                for(let i = 0; i < subArray.length; i++) {
                    subArray[i] = Number(subArray[i])
                }
                subArray.length = arrayWidth
                await arr.push(subArray) // добавляет в основной массив подмассив выведенный из строки
                matrix(arrayLength - 1, arrayWidth) // производит вызов функции записи с длиной массива - 1
            })
        }
    }
    
    const degree = (variable) => {
        let allPathLength = []
        for(let i = 0; i < arr.length; i++){ // заменяем 0 на максимальное число
            for(let j = 0; j < arr.length; j++){
                if(i == j){
                    arr[i][j] = 0
                    j++
                }
                if(arr[i][j] == 0){
                    arr[i][j] = Infinity
                }
            }
        }
        for(let i = 0; i < arr.length; i++){ // создаем матрицу для записи элементов в массив
            allPathLength.push(Infinity)
        }
        allPathLength[variable] = 0
        for(let i = 0; i < arr.length; i++) {
            if(allPathLength[i] < Infinity) {
                for(let j = 0; j < arr.length; j++) {   
                    if(arr[i][j] + allPathLength[i] < allPathLength[j]) {
                        allPathLength[j] = arr[i][j] + allPathLength[i]
                    }
                }
            }
        }
        console.log(arr)
        arrChars.length = arr.length
        console.log(...arrChars)
        console.log(...allPathLength)
    }

Ответы (0 шт):