Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
3 / 1 / 2
Регистрация: 05.05.2020
Сообщений: 39

Вывод маршрутов в алгоритме Дейкстры

13.09.2020, 11:25. Показов 1537. Ответов 1

Студворк — интернет-сервис помощи студентам
Программа рабочая, но нужно поправить отрывок кода с выводом маршрутов кратчайших путей: сделать так, чтобы маршруты выводились в обычном порядке, а не в обратном

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
program DijkstraAlgorythm;
 
const
  inf = 10000;
 
type
  Tvektor = array of integer;
  Tmtrx = array[,] of integer;
  Tvisit = array of boolean;
 
procedure Input(var Mtrx: Tmtrx; var T: text; var N: integer);
begin
  assignfile(T, 'C:\Users\User\Desktop\data1.txt');
  reset(T);
  read(T, N);
  SetLength(Mtrx, N, N);
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
    begin
      read(T, Mtrx[i, j]);
      if Mtrx[i, j] = -1 then
        Mtrx[i, j] := inf;
    end;
  close(T);
end;
 
procedure Print(var Mtrx: Tmtrx; var N: integer);
begin
  writeln('Матрица смежности графа:');
  for var i := 0 to N - 1 do 
  begin
    for var j := 0 to N - 1 do
    begin
      if Mtrx[i, j] = inf then
        write('- ')
      else
        write(Mtrx[i, j], ' ');
    end;  
    writeln;
  end;
end;
 
procedure Dijkstra(Mtrx: Tmtrx; N: integer; var vertex: TVektor);
var
  index, min, v: integer;
  distance: Tvektor;
  visited: Tvisit;
begin
  SetLength(visited, N);
  SetLength(distance, N);
  SetLength(vertex, N);
  visited[0] := true;
  for var i := 1 to N - 1 do
  begin
    distance[i] := Mtrx[0, i];
    vertex[i] := 1;
    visited[i] := false;
  end;
  
  for var count := 0 to N - 1 do
  begin
    min := inf;
    for var i := 0 to N - 1 do
      if (not visited[i]) and (distance[i] <= min) then
      begin
        min := distance[i];
        index := i;
      end;
    for var i := 0 to N - 1 do
      if (distance[index] + Mtrx[index, i] < distance[i]) then
      begin
        distance[i] := distance[index] + Mtrx[index, i];
        vertex[i] := index + 1;
      end;
    visited[index] := true;
  end;            
  
  writeln;
  for var i := 0 to n - 1 do
    write(vertex[i]:5);
  writeln;
  
  write('Длины кратчайших путей из первой вершины до');
  writeln;
  for var i := 1 to N - 1 do 
  begin
    if distance[i] <> inf then
      writeln(i + 1, ': ', distance[i])
    else writeln(i + 1, ': ', 'маршрут недоступен');
  end;
  
 //вывод маршрутов
  write('Маршруты путей из первой вершины до');
  writeln;
  for var i := 1 to n - 1 do
  begin
    v := i + 1;                  
    write(i + 1, ':', v:3);
    repeat
      v := vertex[v - 1];              
      write(v:3);
    until v = 1;
    writeln;
  end;
end;
 
var
  N: integer;
  Mtrx: Tmtrx;
  T: text;
  vertex: TVektor;
begin
  Input(Mtrx, T, N);
  Print(Mtrx, N);
  writeln;
  Dijkstra(Mtrx, N, vertex);
  writeln;
end.
Вложения
Тип файла: txt data1.txt (95 байт, 15 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.09.2020, 11:25
Ответы с готовыми решениями:

Ошибка в алгоритме Дейкстры
Помогите, пожалуйста исправить ошибки в коде! Не объявлены идентификаторы &quot;all&quot; &quot;information&quot; &quot;output&quot;, в...

Ошибка в Алгоритме Дейкстры?
Алгоритм работает, но не всегда точно с ошибкой. Например: Долно быть: кратчайший путь от вершины 1 до 2-й составляет 7, до 3-й — 9,...

Переход от идеальных маршрутов к реальным при реализации алгоритма Дейкстры
Здравствуйте , есть программа для транспортной компаний где маршрут будет рассчитан по Дейкстре . Маршрут должно быть оптимальным . В...

1
 Аватар для canadamoscow
1179 / 430 / 194
Регистрация: 23.03.2020
Сообщений: 1,021
Записей в блоге: 1
13.09.2020, 20:05
Лучший ответ Сообщение было отмечено DECO27 как решение

Решение

Особо не вникая
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//вывод маршрутов
  write('Маршруты путей из первой вершины до');
  writeln;
  
  for var i := 1 to n - 1 do
  begin
    v := i + 1;                  
    write(i + 1, ': ');
    var s := inttostr(v);
    repeat
      v := vertex[v - 1];              
      s := inttostr(v) + ' → '+ s;
    until v = 1;
    writeln(s);
  end;
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.09.2020, 20:05
Помогаю со студенческими работами здесь

Затруднения в алгоритме. Вывод критичных сообщений.
Затруднения следующие: программный модуль управления оборудованием, модуль вывода информации на дисплей. У модуля управления оборудованием...

Вывод пути (алгоритм Дейкстры)
Реализация алгоритма Дейкстра. В массиве distance - найденные кратчайшие пути, visited - логический, для хранения информации о...

Вывод пути алгоритма Дейкстры
Есть такой код, для реализации алгоритма Дейкстры, но никак не понимаю как сделать так, чтобы он выводил еще и сам путь, который совершает ...

Количество маршрутов
Доброе утро всем!:) Есть задачка. На картинке показаны шесть квадратов и возможные маршруты их прохождения. НУжно посчитать количество...

Настройка маршрутов IP
Всем привет! У меня следующая проблема... Сижу на домашнем ноутбуке через WiFi-роутер. Настроил VPN соединение с нужным мне сервером,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru