Разработать программу на PascalABC для решения задачи Генри Форда
pascal
program FloydWarshall;
const
INF = 10000; // Бесконечность
var
n: Integer; // Количество вершин
graph: array of array of Integer; // Матрица смежности
procedure FloydWarshallAlgorithm;
var
i, j, k: Integer;
begin
for k := 0 to n - 1 do // Проходим по промежуточным вершинам
for i := 0 to n - 1 do // Проходим по начальным вершинам
for j := 0 to n - 1 do // Проходим по конечным вершинам
if graph[i][k] + graph[k][j] < graph[i][j] then
graph[i][j] := graph[i][k] + graph[k][j];
end;
procedure PrintShortestPaths;
var
i, j: Integer;
begin
for i := 0 to n - 1 do
begin
for j := 0 to n - 1 do
begin
if graph[i][j] = INF then
Write('INF ', #9)
else
Write(graph[i][j], ' ', #9);
end;
Writeln;
end;
end;
begin
// Ввод данных
Write('Введите количество вершин: ');
Readln(n);
SetLength(graph, n, n); // Инициализация матрицы смежности
// Ввод матрицы смежности
Writeln('Введите матрицу смежности:');
for i := 0 to n - 1 do
for j := 0 to n - 1 do
Read(graph[i][j]);
// Заполнение непрямых связей бесконечностью
for i := 0 to n - 1 do
for j := 0 to n - 1 do
if (i <> j) and (graph[i][j] = 0) then
graph[i][j] := INF;
// Выполнение алгоритма Флойда-Уоршелла
FloydWarshallAlgorithm;
// Вывод результатов
Writeln('Матрица кратчайших путей:');
PrintShortestPaths;
end.
Программа запрашивает у пользователя количество вершин и матрицу смежности графа. Затем программа выполняет алгоритм Флойда-Уоршелла и выводит матрицу кратчайших путей на экран.
Например, если вводить следующие данные:
Введите количество вершин: 4
Введите матрицу смежности:
0 2 INF INF
INF 0 3 INF
INF INF 0 1
INF INF INF 0
То программа выведет следующую матрицу кратчайших путей:
Матрица кратчайших путей:
0 2 3 4
INF 0 3 4
INF INF 0 1
INF INF INF 0
В данном примере матрица смежности представляет граф, в котором есть 4 вершины и следующие ребра:
- Ребро от вершины 1 к вершине 2 с весом 2
- Ребро от вершины 2 к вершине 3 с весом 3
- Ребро от вершины 3 к вершине 4 с весом 1
Матрица кратчайших путей показывает кратчайшие расстояния от каждой вершины до каждой вершины. Например, самый короткий путь от вершины 1 до вершины 3 составляет 3 единицы веса. Путь от вершины 1 до вершины 4 не существует, поэтому в матрице кратчайших путей стоит значение "INF" (бесконечность).Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет