Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2009, 14:39   #1
Mariya2009
Пользователь
 
Регистрация: 13.06.2009
Сообщений: 26
По умолчанию Граф в Делфи

Для заданного графа найти и вывести кратчайший путь между заданными вершинами.
Вопрос в том как это сделать в Делфи 7, может кто уже такое делал???????????????
Mariya2009 вне форума Ответить с цитированием
Старый 13.09.2009, 14:55   #2
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Все это уже обсуждалось и не раз на форуме.
Вот например:
http://programmersforum.ru/showthrea...9+%EF%F3%F2%FC
Просто введите в строке поиска на форуме:
кратчайший путь
Дейкстра
Также посмотрите на сайте wikipedia, там эти алгоритмы практически "на пальцах объясняются".
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 13.09.2009, 15:14   #3
Mariya2009
Пользователь
 
Регистрация: 13.06.2009
Сообщений: 26
По умолчанию

Это немного не то, мне нужно чтоб просто ввел 2 вершины, и он вывел мне кратчайший путь, найти такое не могу и не получается изменить имеющиеся коды
Mariya2009 вне форума Ответить с цитированием
Старый 13.09.2009, 15:36   #4
Mariya2009
Пользователь
 
Регистрация: 13.06.2009
Сообщений: 26
По умолчанию

Код:
const n = 10; //количество вершин в графе
var
  a:array[1..n,1..n] of longint;//матрица смежности
  b:array[1..n]of boolean;//список просмотренных вершин
  d:array[1..n] of longint;//кротчайшие расстояния
  q, i, j, m, v: integer;
begin
  //Ввод данных
  q := StrToIntDef(Edit1.Text, 1); //начальная вершина
  if (q < 1) or (q > n) then q := 1;
  for i := 1 to n do
  for j := 1 to n do
  a[j, i] := StrToIntDef(StringGrid1.Cells[i - 1, j - 1], -1);
  //Расчет
  fillchar(b,sizeof(b),0);
  fillchar(d,sizeof(d), 10000);
  d[q] := 0;//расстояние до начальной вершины
  for i:=1 to n do
  begin
    m := 1000;
    for j := 1 to n do
    if ( (d[j] <= m) and (not b[j]) ) then
    begin
      m:=d[j];
      v:=j;
    end;
    b[v] := true;
    for j := 1 to n do
     if ((a[v,j] <> -1) and (not b[j]) and (d[v]+a[v,j]
       d[j] := d[v] + a[v,j];
  end;
  //Вывод результата
  ListBox1.Clear;
  for i := 1 to n do
    ListBox1.Items.Append(IntToStr(q)
      + ' -> ' + IntToStr(i) + ': '
      + IntToStr(d[i]));
end;
Эта программа находит кратчайшее расстояние от одной из вершин графа до всех остальных, помогите переделать чтоб находила до указанной вершины

Последний раз редактировалось Stilet; 14.09.2009 в 10:11.
Mariya2009 вне форума Ответить с цитированием
Старый 13.09.2009, 16:40   #5
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Вообще то в теме, указанной в посте #2 проблема с указанием начальной вершины и конечной вершины и расстояния между ними была решена, в качестве начальной вершины выбирался индекс города и конечной - другого города.
Вот исходник, где есть процедура DK - в которой задаются начальная и конечная вершины, а внутри вычисляется сумма данного расстояния.
P.S. Лишнее там уберете. Если, что-то будет не получаться лучше присылайте исходник, так легче исправлять ошибки (чем мне заново создавать проект и расставлять компоненты).
Кстати здесь не до конца строка:
Код:
for j := 1 to n do
if ((a[v,j] <> -1) and (not b[j]) and (d[v]+a[v,j]
d[j] := d[v] + a[v,j];
end;
Вообщем, просто подставите процедуру из моего исходника и все должно получиться, в переменной SummaKm и будет содержаться необходимое расстояние между двумя вершинами.
Вложения
Тип файла: rar Unit1 по Дейкстре.rar (175.5 Кб, 50 просмотров)
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.

Последний раз редактировалось ArtInt; 13.09.2009 в 16:50.
ArtInt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
граф де Брейна ne11son Помощь студентам 6 11.11.2011 01:58
Граф. режим в С Rybik Общие вопросы C/C++ 17 21.06.2009 01:53
Граф в Delphi Римма1990 Помощь студентам 0 20.04.2009 20:53
Задача на граф kopzone Помощь студентам 5 27.07.2008 23:14
Граф в Делфи консоль LLIypLLIyH Помощь студентам 6 12.06.2008 18:20