Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

Как определить связен ли граф?   Найти похожие ветки 

 
Derww   (2006-12-30 12:09) [0]

Оцените, пожалуйста, мой вариант, основанный на поиске в глубину:

/////////////////////////////////////////////////////////////////////////////////
type int=longint;

Procedure solve(v: int);
var  j: int;
begin
    use[v]:=true;
    for j:=1 to n do
      if not use[j] and (a[v,j]<>0) then
        begin
        a[v,j]:=0;
        solve(j);
        end;
end;

begin
    count:=0;
    FillChar(use,sizeof(use),false);
    for i:=1 to n do if not use[i] then
      begin
       inc(count);
       solve(i);
      end;
    if count=1 then writeln("Связный") else writeln("Не связный");
end.
/////////////////////////////////////////////////////////////////////////////////

Пожалуйста, подскажите правильный ли алгоритм я использую!
Заранее благодарен!


 
TUser ©   (2006-12-30 14:23) [1]


>     FillChar(use,sizeof(use),false);

var use: packed array ...

FillChar(@use[0],length(use)*sizeof(use[0]),false);

В остальном, все вроде праильно. Только я обычно пишу совсем не так, но это дело вкуса. В частности, считать число связных компонент совсем не обязательно - можно останавливать алгоритм после того, как count стал больше 1. Поэтому вместо count можно ввести булевую переменную. Мой пример

procedure Proceed (I: integer);
vart j: integer;
begin
 use[i] := true;
 for j := 0 to high (use) do
   if i <> j then
   if a[i, j] <> 0 then
     if not use[j] then
       proceed (j);
end;    

begin
if length (use) = 0 then
 writeln ("Empty graph");
 exit;

proceed (0);
for i := 1 to high(use) do
 if not use [i] then
   writeln ("Несвязный")
   exit;
writeln ("свзный");
end.



Страницы: 1 вся ветка

Текущий архив: 2007.01.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.071 c
15-1167137406
AntiUser
2006-12-26 15:50
2007.01.21
Разработчики Firefox не смогли устранить ошибки при работе в ...


1-1164375281
DelphiLexx
2006-11-24 16:34
2007.01.21
DBGridEh и OnEditButtonClick


3-1162205718
oleg_v
2006-10-30 13:55
2007.01.21
как обнулить (обновить) поле Autoincrement(+)


3-1162305280
Stanislav
2006-10-31 17:34
2007.01.21
Подключить таблицу из другой базы


2-1167971096
delphim
2007-01-05 07:24
2007.01.21
печать с помощью chartFX (ActiveX)