Форум программистов, компьютерный форум, киберфорум
Наши страницы

Восстановление пути по матрице, возвращаемой алгоритмом Флойда - Уоршелла - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определите количество участников состязаний, которые разделили первое место http://www.cyberforum.ru/cpp-beginners/thread1102839.html
Состязания. Если перенумеровать спортсменов числами от 0 до n-1, а попытки каждого из них – от 0 до m-1, то на вход программа получает массив int A, состоящий из неотрицательных чисел. Будем...
C++ Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных) В программу передаю 2 массива из пяти чисел. После выполнения функции getAM хочу, чтобы она возвращала массив, получаемый суммированием двух входных. Сейчас, она выводит только первый элемент.... http://www.cyberforum.ru/cpp-beginners/thread1102825.html
C++ Рекурсивная программа, печатающая n-ое простое число.
Напишите, пожалуйста, рекурсивную программу, печатающую n-ое простое число.
Определить число латинских букв в строке C++
Я не знаю как сделать эту задачу. Прошу помочь.
C++ Запуск и последующее удаление всех исполняемых файлов из каталога http://www.cyberforum.ru/cpp-beginners/thread1102776.html
Здравствуйте. Прошу помочь написать программу, которая бы запускала все исполняемые файлы (.exe, .bat, .cmd) из заданного каталога, а потом удаляла их. Как запустить исполняемый файл мне понятно,...
C++ Добавление элемента в линейный список после 1-го, 3-го, 5-го и т.д Помогите пожалуйста, нужно написать функцию добавления в линейный список заданного элемента после 1-го, 3-го, 5-го и т.д. подробнее

Показать сообщение отдельно
saroff
5 / 1 / 0
Регистрация: 09.11.2013
Сообщений: 143
25.02.2014, 02:02  [ТС]
ya_noob, Либо я что то делаю неправильно, либо еще чего, но алгоритм восстановления пути как здесь возвращает не верный результат (причем весьма часто).
В итоге нашел где-то, что можно сделать рекурсивный алгоритм восстановления. Собственно, вот он, на делфях правда.
Delphi
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
procedure ConvertRoute (From,mTo:Integer; var OutArray:TVektor; var VisitedVert:TSet);
var
  I:Integer;
begin
  if From <> RouteArray[From,mTo] then
  begin
    ConvertRoute(From,RouteArray[From,mTo],OutArray,VisitedVert);
  end
  else
  if not (From in VisitedVert) then
  begin
    I := Length(OutArray) + 1;
    SetLength(OutArray,I);
    OutArray[I - 1] := From;
    Include(VisitedVert,From);
  end;
  if (RouteArray[From,mTo] <> mTo) and (RouteArray[mTo,From] <> mTo) then
  begin
    ConvertRoute(RouteArray[From,mTo],mTo,OutArray,VisitedVert);
  end
  else
  if not (From in VisitedVert) then
  begin
    I := Length(OutArray) + 1;
    SetLength(OutArray,I);
    OutArray[I - 1] := mTo;
    Include(VisitedVert,mTo);
  end;
end;
VisitedVert множество куда заносятся вершины уже присутствующие в маршруте, иначе он заносил одну и ту же вершину по много раз.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru