Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.026 c
8-1144144674
Goorus
2006-04-04 13:57
2007.01.21
Vorbis/OGG


15-1166814079
Cerberus
2006-12-22 22:01
2007.01.21
Заканчивается год.


3-1162552706
salexn
2006-11-03 14:18
2007.01.21
Ошибки фильтрации TClientDataSet


15-1167147562
Ученик чародея
2006-12-26 18:39
2007.01.21
За поиск НЛО в сетях пентагона хакеру грозит 70 лет тюрьмы.


15-1167318733
Strate
2006-12-28 18:12
2007.01.21
Отладка




   Наверх