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

Проверка графа на двудольность

23.04.2010, 19:01. Показов 3124. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые форумчане!
Пишу программу для проверки графа на двудольность. Решила использовать процедуру поиска в глубину.
Не могу найти свою ошибку - почему программа всегда выдает мне, что граф двудольный?

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
 //проверка двудольности
const MaxN = 10001;
type TAdj = ^pAdj;
     pAdj = record
                ver: LongInt;
                next: TAdj;
            end;
var adj: array[0..MaxN] of TAdj;   // Граф - списки смежности
    color: array[1..MaxN] of byte; // Пройденные вершины
    x, y,   a, N, M: LongInt;     
 
procedure Add(v1, v2: LongInt);  // Добавляем ребро
var tmp: TAdj;
begin
    new(tmp);                    // Для этого создаем переменную
    tmp^.ver := v2;              // Запоминаем нужную информацию
    tmp^.next := adj[v1];        // Прибавляем к ней существующий список
    adj[v1] := tmp;              // Заменяем ею в массиве
end;       
 
 
 
function bipartite: Boolean;
var ok: Boolean;
 
  procedure dfs(v, clr: LongInt);
  var w: TAdj;
  begin
      color[v] := clr;
      w := adj[v];
 
      while w <> nil do
      begin
          if color[w^.ver] = 0 then dfs(w^.ver, (clr mod 2)+1) else
                if color[w^.ver] = clr then ok := false;
              if not ok then exit;  
          w := w^.next;
      end;
  end;                                  
 
begin
    ok := true;
    for i := 1 to N do
      if color[i] = 0 then dfs(i, 1);
    bipartite := ok;
end;
Может, я как-то неправильно согласовываю с матрицей смежности?
Граф я строю произвольный в процессе выполнения программы)
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2010, 19:01
Ответы с готовыми решениями:

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

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

Двудольность графа
Требуется проверить граф на двудольность методом поиска в глубину либо в ширину на С++ Опишите,...

Для графа определить его двудольность и вывести обе доли (исправить программу)
помогите исправить программу! запускается, на файл вывода пуст... а когда раскоментирываю - не...

0
23.04.2010, 19:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2010, 19:01
Помогаю со студенческими работами здесь

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

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

Проверка на неориентированность графа
По заданной квадратной матрице n×n из нулей и единиц определить, может ли она быть матрицей...

Проверка графа на цикл
Как проверить графф на цикл? #define _CRT_SECURE_N0_WARNINGS #include &lt;stdio.h&gt; #include...


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

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