Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 17
1

Поиск целей, циклов в орграфе

13.06.2016, 18:27. Показов 1373. Ответов 5

Author24 — интернет-сервис помощи студентам
Для произвольного ориентированного графа разработать алгоритм и составить программу, позволяющую выделять в нем: цепь, цикл, простую цепь, простой цикл. Орграф и количество ребер в данных путях - входные параметры. (+ построение блок схемы программы в Word.).

Помогите сделать для зачёта надо, сам никак не разберусь. Заранее спасибо.

Можно без блок-схемы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2016, 18:27
Ответы с готовыми решениями:

Поиск циклов в орграфе
Добрый день! Помогите, пожалуйста, разобраться с задачей. Имеется ориентированный граф....

Определить наличие всех циклов методом обхода в глубину на орграфе
Доброй ночи! Очень нужна помощь в задании. Звучит оно так: "Определить наличие всех циклов методом...

Поиск сильных связностей в орграфе
Какой алгоритм применяется для решения этой задачи? Есть ли уже готовые работающие примеры?

Поиск сильно связных компонент в орграфе
Для поиска использовал Алгоритм Косарайю. Зашел в тупик, проблема в том, что с обычным графом...

5
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 17
22.06.2016, 21:04  [ТС] 2
Может кому нибудь да пригодится!

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
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
program Project11;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  Windows;
 
type mas = array[1..10] of integer;
     matrix=array[1..10] of mas;
     zepi= array[1..100] of mas;
 
var
   TZEP,TZIK: mas;
   MS,MD,ind: matrix;
   MZEP,MPZEP,MZIK,MPZIK: zepi;
   i,j,n,KZEP,m,KPZEP,KZIK,KPZIK: integer;
 
 
procedure SZEP(KV: integer; var ind: matrix; var TZ: mas; var PZ: zepi);
var i,j,t: integer;
begin
     if KV=0 then
        for i:=1 to n do
        begin
             TZ[1]:=i;
             SZEP(1,ind,TZ,PZ);
        end
     else if KV=m+1 then
     begin
          if TZ[1]<>TZ[KV] then begin
             KZEP:=KZEP+1;
             PZ[KZEP]:=TZ;
          end
     end
     else begin
          for i:=1 to n do
              if (ind[TZ[KV],i]=0) and (MS[TZ[KV],i]=1) then
              begin
                   TZ[KV+1]:=i;
                   ind[TZ[KV],i]:=1;
                   SZEP(KV+1,ind,TZ,PZ);
                   ind[TZ[KV],i]:=0;
              end;
     end;
end;
 
procedure SZIK(KV: integer; var ind: matrix; var TZ: mas; var PZ: zepi);
var i,j,t: integer;
begin
     if KV=0 then
        for i:=1 to n do
        begin
             TZ[1]:=i;
             SZIK(1,ind,TZ,PZ);
        end
     else if KV=m+1 then
     begin
          if TZ[1]=TZ[KV] then begin
             KZIK:=KZIK+1;
             PZ[KZIK]:=TZ;
          end
     end
     else begin
          for i:=1 to n do
              if (ind[TZ[KV],i]=0) and (MS[TZ[KV],i]=1) then
              begin
                   TZ[KV+1]:=i;
                   ind[TZ[KV],i]:=1;
                   SZIK(KV+1,ind,TZ,PZ);
                   ind[TZ[KV],i]:=0;
              end;
     end;
end;
 
procedure SPZEP(K: integer; ZEP: zepi; var KP: integer; var PZEP: zepi);
var i,j,t,f: integer;
begin
     for i:=1 to K do
     begin
          f:=0;
          for j:=1 to m do
              for t:=j+1 to m+1 do
                  if ZEP[i,j]=ZEP[i,t] then f:=1;
          if f=0 then begin
             KP:=KP+1;
             PZEP[KP]:=ZEP[i];
          end;
     end;
end;
 
procedure SPZIK(K: integer; ZIK: zepi; var KP: integer; var PZIK: zepi);
var i,j,t,f: integer;
begin
     for i:=1 to K do
     begin
          f:=0;
          for j:=1 to m-1 do
              for t:=j+1 to m do
                  if ZIK[i,j]=ZIK[i,t] then f:=1;
          if f=0 then begin
             KP:=KP+1;
             PZIK[KP]:=ZIK[i];
          end;
     end;
end;
 
begin
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
     write('Введите количество вершин орграфа*, n=');
     readln(n);
     writeln('Ввод матрицы смежности орграфа*:');
     writeln('Если вершина y достижима из вершины x, то ввести 1, иначе 0');
     for i:=1 to n do
         for j:=1 to n do
              if i<>j then begin
                 write('MS[',i,',',j,']=');
                 readln(MS[i,j]);
              end;
     write('Введите количество ребер для циклов и цепей, m=');
     readln(m);
     for i:=1 to n do
         for j:=1 to n do
             ind[i,j]:=0;
     SZEP(0,ind,TZEP,MZEP);
     SPZEP(KZEP,MZEP,KPZEP,MPZEP);
     for i:=1 to n do
         for j:=1 to n do
             ind[i,j]:=0;
     SZIK(0,ind,TZIK,MZIK);
     SPZIK(KZIK,MZIK,KPZIK,MPZIK);
     writeln;
     writeln('Количество цепей -  ',KZEP);
     writeln;
     writeln('Вывод цепей:');
     for i:=1 to KZEP do
     begin
          write('Цепь №',i,': ');
          for j:=1 to m+1 do
              if j=1 then write(MZEP[i,j]) else write('-',MZEP[i,j]);
          writeln(';');
     end;
     readln;
     writeln('Количество простых цепей -  ',KPZEP);
     writeln;
     writeln('Вывод цепей:');
     for i:=1 to KPZEP do
     begin
          write('Простая цепь №',i,': ');
          for j:=1 to m+1 do
              if j=1 then write(MPZEP[i,j]) else write('-',MPZEP[i,j]);
          writeln(';');
     end;
     readln;
     writeln('Количество циклов - ',KZIK);
     writeln;
     writeln('Вывод циклов:');
     for i:=1 to KZIK do
     begin
          write('Цикл №',i,': ');
          for j:=1 to m+1 do
              if j=1 then write(MZIK[i,j]) else write('-',MZIK[i,j]);
          writeln(';');
     end;
     readln;
     writeln('Количество простых циклов - ',KPZIK);
     writeln;
     writeln('Вывод простых циклов:');
     for i:=1 to KPZIK do
     begin
          write('Простой цикл №',i,': ');
          for j:=1 to m+1 do
              if j=1 then write(MPZIK[i,j]) else write('-',MPZIK[i,j]);
          writeln(';');
     end;
     readln;
     readln;
end.
0
1 / 1 / 0
Регистрация: 17.04.2017
Сообщений: 15
21.06.2017, 18:39 3
Добрый день, а можно дать пояснение к процедурам, что да как выполняется, а то я что-то понять не могу
0
3587 / 2196 / 693
Регистрация: 29.05.2013
Сообщений: 9,381
21.06.2017, 20:05 4
Автор уже год как сдал и забыл напрочь это все.
0
Модератор
9270 / 6048 / 2380
Регистрация: 21.01.2014
Сообщений: 25,828
Записей в блоге: 3
22.06.2017, 02:36 5
Пытливый, тут Вы не правы... Автор этого кода был на форуме всего неделю назад, так что у Justicee есть шанс получить ответ...

Не по теме:

(Если автор сам делал, а не скатал откуда-то еще :D )

0
northener
22.06.2017, 02:41     Поиск целей, циклов в орграфе
  #6

Не по теме:

D1973, я лично через год после написания какого-то "случайного" кода с большим трудом смогу его объяснить, если не писал комментарии. Если конечно сей код не является шедевром, которым я могу гордиться многие годы :)
Но у Justicee действительно шанс есть. :)

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2017, 02:41

Поиск циклов в графе. Поиск центра взвешенного графа
В интернете, к сожалению, по этим вопросам не так уж много нашел. Можете посоветовать...

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

Поиск Ф-циклов в графе
Нужно вывести на печать все фундаментальные циклы графа. Мой код выводит правильно(судя по данному...

Поиск циклов в графе
Подскажите, пожалуйста, какие идеи нужно применять к данной задаче


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

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