16 / 4 / 0
Регистрация: 21.12.2010
Сообщений: 29
1

Нахождение оптимального пути в графе

15.01.2011, 14:06. Показов 3951. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Есть у меня такая проблемка, у меня тема курсовой - "Нахождение оптимального пути в графе" Мне нужно написать программу которая будет находить оптимальный т.е. кратчайший путь в графе.
Вроде бы, как мне кажется, pascal я знаю, но вот не могу понять как графы реализовать в паскале. Может быть кто то уже что то подобное делал, может быть кто-нибудь с подобным сталкивался. Хотя бы алгоритм нужен, хоть что-нибудь от чего можно оттолкнуться. Не хватает у меня мозгов(((
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2011, 14:06
Ответы с готовыми решениями:

Поиск оптимального пути в графе
Здравствуйте. Помогите, пожалуйста, написать код задачи по С++. необходимо найти минимальный путь в...

Метод Дейкстры по поиску оптимального пути на графе
По курсу методов оптимизации возникла задача в решении примера поиска оптимального пути на графе с...

Прохождение игры-числового паззла в виде нахождения оптимального пути в графе
На всякий случай сразу упомяну. В эту тему я буду заглядывать минимум неделю с момента публикации...

Реализовать алгоритм А* для поиска оптимального пути из начальной вершины в конечную на графе
Привет Нужно реализовать этот алгоритм для поиска оптимального пути из начальной вершины в...

8
134 / 47 / 11
Регистрация: 27.05.2008
Сообщений: 246
15.01.2011, 19:25 2
обычно графы представляют какой-нибудь матрицей (инцидентности, смежности и т.п.).
для реализации алгоритмов типа поиска кратчайшего пути - самое простое и удобное.

хотя при желании можно замутить и динамическую структуру (типа структуры Вирта что-то, на динамических списках).
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
15.01.2011, 19:31 3
https://www.cyberforum.ru/pascal/thread119165.html
0
20 / 20 / 14
Регистрация: 19.09.2010
Сообщений: 85
15.01.2011, 19:34 4
Юзай алгоритм форда-беллмана.
Это самый оптималный способ.
http://plagiata.net.ru/?p=1074
Здесь алгоритм форда-беллмана на паскале
0
16 / 4 / 0
Регистрация: 21.12.2010
Сообщений: 29
15.01.2011, 19:56  [ТС] 5
Спасибо, посмотрю, почитаю.
0
16 / 4 / 0
Регистрация: 21.12.2010
Сообщений: 29
03.02.2011, 22:20  [ТС] 6
Люди добрые...помогите...не могу ничего понять.
Вот алгоритм Форда-Беллмана на Pascal’e
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
{Bellman-Ford algorithm}
var a : array [1..20,1..20] of word;{matrica cmegnosti}
c, pred, fl, d : array [1..20] of word;{
c - massiv kratchayshih rastoyaniy
pred - massiv predidushih vershin
fl - massiv flagov
d - massiv dlya zapisi puti
}
 
i, j, k, n, first, last : byte;
f : text;{peremennaya dlya otkritiya file in.txt}
{procedura obhoda grafa vglub - dlya poiska vseh putey}
Procedure Dfs(x : word);
var i : byte;{lokalnay peremennaya}
begin
if x=last then {esli konechnaya vershina to vivodim put}
begin
write(first,' ');
for i:=1 to j do {vivodim put}
write(d[i],' ');
writeln;
exit;{vyhodim iz proceduri}
end;
fl[x]:=1;{pomechaem chto bili v vershine}
for i:=1 to n do
if (fl[i]=0)and(a[x,i]<>32767) then
begin
inc(j);
d[j]:=i;{zapisivaem v put vershiny}
dfs(i);{vizivaemsya ot i-oy vershini}
dec(j);
end;
fl[x]:=0;{pomechaem chto vershina svobodna}
end;
{Osnovnaya programma}
begin
assign(f,'in.txt');{otkrivaem file dlya chteniya}
reset(f);
readln(f, n);{shitivaem kol-vo vershin}
for i := 1 to n do
for j := 1 to n do
read(f, a[i,j]);{shitivaem matricy smegnosti}
writeln('Matrix:');
for i:=1 to n do  {vyvodim matricy na ekran}
for j:=1 to n do
if j=n then writeln(a[i,j]) else write(a[i,j],' ');
for i:=1 to n do {zamenyaem nuli - beskonechnostuy}
for j:=1 to n do
if a[i,j]=0 then a[i,j]:=32767;
writeln('Vvedite 1 vershiny');
readln(first);
writeln('Vvedite 2 vershiny');
readln(last);
close(f);{zakrivaem file in.txt}
for j := 1 to n do
begin
c[j] := a[first,j];{zapisivaem nachalnie znacheniya}
if a[first,j] < 32767 then
pred[j] := first;
end;
for i := 3 to n do
for j := 1 to n do
if j <> first then
for k := 1 to n do  {esli ne beskonechnost i put bolee vygodniy}
if (c[k] < 32767) and (c[k] + a[k,j] < c[j]) then
begin
c[j] := c[k] + a[k,j];{zapisivaem novoe znachenie}
pred[j] := k;{zapisivaem pred vershiny}
end;
if c[last] = 32767 then writeln('Net putey') else
begin
writeln;
writeln('Kratchaishiy put:');
write(first,' ');
i := last;
k := 1;
while i <> first do {v obratnom poryadke obhodim put}
begin
d[k] := i;{zapisivaem put v massiv}
k := k + 1;
i := pred[i];
end;
for i := k - 1 downto 1 do {vyvodim kratchayishiy put}
write(d[i],' ');
writeln;
writeln('Vse puti:');
j:=0;
Dfs(first);{vizivaem procedury poiska vseh putey}
end;
readln;readln;{gdem nagatiya klavishi}
end.
не могу разобраться со входными данными...что в текстовый файл записывать?объясните пожалуйста...
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
04.02.2011, 06:52 7
Цитата Сообщение от Cerfuck Посмотреть сообщение
что в текстовый файл записывать
Написано же в комментариях...
Pascal
1
1.readln(f, n);{shitivaem kol-vo vershin}//правильно вроде read(n)-кол.вершин 1 число
Pascal
1
2
3
2.for i := 1 to n do
for j := 1 to n do
read(f, a[i,j]);{shitivaem matricy smegnosti} //матрица смежности
0
2 / 2 / 2
Регистрация: 03.03.2010
Сообщений: 139
01.11.2011, 14:30 8
чё то количество вершин он считывает а вот матрицу не хочет..
напишите пример содержимого файла может я что то не правильно делаю

Добавлено через 2 часа 28 минут
Цитата Сообщение от ggod Посмотреть сообщение
чё то количество вершин он считывает а вот матрицу не хочет..
напишите пример содержимого файла может я что то не правильно делаю
или выдаёт 201 ошибку
0
2 / 2 / 2
Регистрация: 03.03.2010
Сообщений: 139
02.11.2011, 16:48 9
Цитата Сообщение от Puporev Посмотреть сообщение
Написано же в комментариях...
Pascal
1
1.readln(f, n);{shitivaem kol-vo vershin}//правильно вроде read(n)-кол.вершин 1 число
тут должно быть readln(f,n)-т.к. мы считываем кол. вершин из файла
0
02.11.2011, 16:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2011, 16:48
Помогаю со студенческими работами здесь

Нахождение оптимального пути по веткам метро
Добрый день. Задача: Есть карта метрополитена (Московского к примеру), доступны данные о длинах...

Нахождение кратчайшего пути в графе
Примитивный не взвешенный граф описан матрицей смежности, необходимо произвести расчет кратчайшего...

Нахождение максимального пути в нагруженном графе
Здравствуйте! Очень много где искал, но все же не нашел описание алгоритма нахождения...

Нахождение самого длинного пути в ориентированом графе
Всем доброго времени суток.Необходима помощь с алгоритмом поиска самого длинного из...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru