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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2010, 10:20   #1
girlbuuuger
 
Регистрация: 15.05.2010
Сообщений: 6
По умолчанию Поиск самого дешёвого пути. Волновой алгоритм

Необходимо написать программу на делфи. Карта местности задаётся пользователем в виде сетки N на N клеток определённого типа. На карте выбирается местоположение двух населённых пунктов. Требуется проложить самую дешёвую дорогу, связывающую эти 2 пункта, если известна стоимость участка дороги на местности каждого типа(лес-10, поле-20, болото-28 и т.п.).
Так и не смогла разобраться в волновом алгоритме. Помогите пожалуйста
girlbuuuger вне форума Ответить с цитированием
Старый 15.05.2010, 19:22   #2
sabbathist
Пользователь
 
Регистрация: 23.07.2009
Сообщений: 66
По умолчанию

Тут, скорее, алгоритм Дейкстры. Волновой алгоритм хорошо отработает на деревьях, а на обычных графах не будет искать оптимальный путь, если у вас ребра имеют различный вес.
O(n)
sabbathist вне форума Ответить с цитированием
Старый 17.05.2010, 09:36   #3
girlbuuuger
 
Регистрация: 15.05.2010
Сообщений: 6
По умолчанию

Спасибо, sabbathist, это как раз то, что нужно, но как реализовать на делфи, я так и не нашла(((
girlbuuuger вне форума Ответить с цитированием
Старый 17.05.2010, 10:00   #4
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Может это подойдет:
http://www.delphisources.ru/pages/so...-algoritm.html
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 17.05.2010, 10:35   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Уже проще свой написать . В майском выпуске журнала Программист будет описание алгоритма Дейкстры, к нему будет выложен исходники аналогичной программы, но с комментарии и самостоятельным классом для использования в качестве графа, цель которого находить кратчайшее расстояние до точек, а также с составлением наикратчайшего маршрута до каждой из этих точек
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 17.05.2010, 10:41   #6
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Когда планируется выход номера???
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 17.05.2010, 10:56   #7
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Алгоритм Дейкстры.
Вот когда-то писал.
Тыпа такого надо? или что?
Алгоритм Дейкстра.rar
Жми на весы!!!
Chudo4258 вне форума Ответить с цитированием
Старый 17.05.2010, 14:49   #8
girlbuuuger
 
Регистрация: 15.05.2010
Сообщений: 6
По умолчанию

всё это оч похоже. Мне нужно сделать вот такую же программу, но чтоб был алгоритм Дейкстры или хотя бы полегче, чем эта
Вложения
Тип файла: zip gpathfind.zip (238.9 Кб, 39 просмотров)
girlbuuuger вне форума Ответить с цитированием
Старый 17.05.2010, 21:35   #9
sabbathist
Пользователь
 
Регистрация: 23.07.2009
Сообщений: 66
По умолчанию

Вам нужен точный алгоритм или тот, что используется в играх (например, когда юниты бегают по карте)? Если точный не нужен, то можно использовать вместо Дейкстры алгоритм A* (А-стар).
Дейкстра есть на паскале, позже выложу.
O(n)
sabbathist вне форума Ответить с цитированием
Старый 17.05.2010, 22:55   #10
sabbathist
Пользователь
 
Регистрация: 23.07.2009
Сообщений: 66
По умолчанию

Код:
const maxv=1000;
maxe=1000000;
inf=maxlongint;
type PEdge=^TEdge;
 TEdge=record
 v: longint;
 w: longint;
 d: longint;
 ne: PEdge;
end;
var g: array [0..maxv+1] of PEdge;
dist: array [0..maxv+1] of longint;
i,j,n,k,m,v1,v2,a,b,w: longint;
t:  PEdge;
p: array [0..maxv+1] of boolean;

procedure addedge(v1,v2,w: longint);
var x: PEdge;
begin
 new(x);
 x^.v:=v2;
 x^.w:=w;
 x^.ne:=g[v1];
 g[v1]:=x;
end;

procedure Dejkstra(v: longint);
var cur,i: longint;
 r: PEdge;
begin
 fillchar(p,sizeof(p),0);
 for i:=1 to maxv do
   dist[i]:=inf;
 cur:=v;
 dist[v]:=0;
 while cur<>0 do begin
   p[cur]:=true;
   r:=g[cur];
   while r<>nil do begin
     if (dist[r^.v]>dist[cur]+r^.w) then
       dist[r^.v]:=dist[cur]+r^.w;
     r:=r^.ne;
   end;
   cur:=0;
   for i:=1 to n do
     if (p[i]=false) and (dist[i]<>inf) and ((dist[i]<dist[cur]) or (cur=0)) then
       cur:=i;
 end;
 dist[v]:=0;
end;
begin
 assign(input,'input.txt');
 assign(output,'output.txt');
 reset(input);
 rewrite(output);
 read(n,m);
 for i:=1 to m do
  begin
    read(v1,v2,w);
    addedge(v1,v2,w);
    addedge(v2,v1,w);
  end;
 read(a,b);
 dejkstra(a);
 writeln(dist[b]);
end.

тут дейкстра и построение графа. Но вам ведь надо строить "особый граф". Где вес ребер будет равен "стоимости клетки". Но это уже за вами
O(n)

Последний раз редактировалось sabbathist; 17.05.2010 в 23:18.
sabbathist вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм Флойда. Поиск Кратчайшего пути. Shady Помощь студентам 5 06.10.2014 18:29
Волновой алгоритм (алгоритм Ли) MrRockchip Общие вопросы C/C++ 4 10.05.2010 13:26
Волновой алгоритм сферическая волна ArtInt Общие вопросы Delphi 2 24.04.2010 15:43
Поиск наименьшего и самого редкоповторяющегося числа в Memo (Delphi) giga_person Помощь студентам 5 21.03.2010 19:20
Волновой алгоритм поиска Merkator Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 12.02.2009 16:15