Макросы для Excel: Как использовать алгоритм Флойда для нахождения кратчайшего пути
Макросы в Excel - это мощный инструмент, который позволяет автоматизировать повторяющиеся задачи и упростить работу с данными. Один из популярных алгоритмов, который можно использовать с помощью макросов, это алгоритм Флойда. Этот алгоритм позволяет найти кратчайший путь между всеми парами вершин в графе.
Для использования алгоритма Флойда с помощью макросов в Excel, вам понадобится следующий код:
Sub FloydAlgorithmWithFullRange()
Dim i As Integer, j As Integer, k As Integer
Dim n As Integer
Dim inputRange As Range
Set inputRange = Application.InputBox("Выберите диапазон ячеек с матрицей", Type:=8)
n = Sqr(inputRange.Cells.Count) ' Получаем размерность матрицы
Dim matrix() As Variant
ReDim matrix(1 To n, 1 To n)
'Заполнение матрицы значениями из выбранного диапазона
Dim count As Integer
count = 1
For i = 1 To n
For j = 1 To n
matrix(i, j) = inputRange.Cells(count).Value
If i = j Then
matrix(i, j) = 0
ElseIf matrix(i, j) = "" Then
matrix(i, j) = 9999 'Значение "бесконечность"
End If
count = count + 1
Next j
Next i
'Алгоритм Флойда
For k = 1 To n
For i = 1 To n
For j = 1 To n
If matrix(i, k) + matrix(k, j) < matrix(i, j) Then
matrix(i, j) = matrix(i, k) + matrix(k, j)
End If
Next j
Next i
Next k
'Вывод результата в другой выбранный диапазон
Dim outputRange As Range
Set outputRange = Application.InputBox("Выберите верхнюю левую ячейку для вывода результата", Type:=8)
For i = 1 To n
For j = 1 To n
outputRange.Offset(i - 1, j - 1).Value = matrix(i, j)
Next j
Next i
End Sub
Если вы хотите, чтобы этот код выводил не расстояние между вершинами, а наикратчайшее количество ходов, вам нужно внести некоторые изменения в алгоритм. Вместо того, чтобы просто суммировать значения в матрице, вы можете добавить счетчик, который будет отслеживать количество шагов от одной вершины к другой.
Для этого вам нужно добавить дополнительную переменную, которая будет хранить количество шагов, и изменить условие внутреннего цикла алгоритма Флойда. Вот как это можно сделать:
'Алгоритм Флойда для нахождения кратчайшего количества шагов
For k = 1 To n
For i = 1 To n
For j = 1 To n
If matrix(i, k) + matrix(k, j) < matrix(i, j) Then
matrix(i, j) = matrix(i, k) + matrix(k, j)
'Добавляем шаг к количеству шагов
steps(i, j) = steps(i, k) + steps(k, j)
End If
Next j
Next i
Next k
Таким образом, вы можете использовать алгоритм Флойда с макросами в Excel для нахождения кратчайшего пути или количества шагов между вершинами в графе. Надеемся, что эта информация будет полезной для вас при работе с данными в Excel.
Авто видеорегистраторы с экраном
Блог в WordPress для фрилансера
CamZamZam - снимки с вебкамеры и гифками
Чат для групп
Чат рулетка в 2026: современные подходы
Как подготовить ребенка к жизни в лагере: полезные советы.
Как подготовиться к проблемам со здоровьем в лагере Салют.
Как правильно организовать спортивные мероприятия в лагере Салют.
Как предотвратить болезнь в детском лагере: гигиена и правила.
Как выбрать хостинг с хорошей поддержкой
Кассовое оборудование для салонов красоты
Куклы LOL витрина онлайн
Лайфхаки для родителей, выбирающих лагерь Салют.
Лучшие игры Cartoon Network 2023
Лучшие лагерные занятия в Салюте: что выбрать для своего ребенка.
Монетизация постов
Оценка качества обслуживания в лагере Салют: что говорят родители.
Партнёрская программа без блога: как получать доход из Telegram
Популярные сумки 2024
QR-коды онлайн читатель
Регистрация ИП в Москве с выбором адреса регистрации
Решение проблемы плохого поведения в лагере Салют: методы и подходы.
Русский видеочат онлайн
Специалист по анализу доменных цепочек
Специализированное оборудование для строительства аэродромов
Сравнение курсов и программ в лагере Салют.
Типичные ЛОР заболевания в сезон простуд
Узбекские фильмы драмы
Видео-знакомства без предварительного уведомления
Видеообмен случайным человеком
Загородный дом с верандой