Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2010, 08:36   #1
Ikram
 
Регистрация: 24.04.2010
Сообщений: 5
По умолчанию Turbo Pascal

Здравствуйте!!!
Как можно определить является ли этот граф Эйлеровым (для Ориентированного и для Неориентированного). Пожалуйста помогите
Ikram вне форума Ответить с цитированием
Старый 25.04.2010, 10:02   #2
Филантроп
Форумчанин
 
Аватар для Филантроп
 
Регистрация: 12.04.2010
Сообщений: 134
По умолчанию

Цитата:
Дадим теперь строгое определение эйлерову циклу и эйлерову графу. Если граф имеет цикл (не обязательно простой), содержащий все ребра графа по одному разу, то такой цикл называется эйлеровым циклом, а граф называется эйлеровым графом. Если граф имеет цепь (не обязательно простую), содержащую все вершины по одному разу, то такая цепь называется эйлеровой цепью, а граф называется полу-эйлеровым графом.
Ясно, что эйлеров цикл содержит не только все ребра по одному разу, но и все вершины графа (возможно, по несколько раз). Очевидно также, что эйлеровым может быть только связный граф.


Программа, строящая Эйлеров цикл, представленна ниже. (граф задается матрицей смежности, причем 0ставим если ребра нет, и один если есть).
Код:
Uses CRT;

var
 N :integer;
M: array [1..20, 1..20] of boolean ;

Type
  list = ^node;
  node = record
    i: integer;
    next: list;
  end;
Var
  stack1, stack2:        list;
  v, u, x, i, j:      integer;
  count: array [1..20] of byte;
procedure readfile;
var
 filename:string;
 f:text; i,j:integer;
 b:byte;
begin
 writeln('Введите имя файла:');
 readln( filename );
 assign(f, filename);
 reset(F);
 readln(f , n );
 for i:=1 to n do for j:=1 to n do begin
  read( f , B );
  if b=1 then m[i,j]:=true else m[i,j]:=false;
 end;
 close(F);
end;

Procedure Push(x: integer; var stack: list);
Var
  temp: list;
Begin
  New(temp);
  temp^.i:=x;
  temp^.next:=stack;
  stack:=temp;
End;
Procedure Pop(var x: integer; var stack: list);
Begin
  x:=stack^.i;
  stack:=stack^.next
End;
Function Peek(stack: list): integer;
Begin
  Peek:=stack^.i
End;
Procedure PrintList(l: list);
Begin
  If l=nil then
  begin
    writeln('Ошибка!');
    exit;
  end;
  write('Эйлеров цикл: ');
  While l<>nil do
  Begin
    Write(l^.i,'-');
    l:=l^.next;
  End;
End;
Begin
 readfile;
  for i:=1 to N do
  begin
    count[i]:=0;
    for j:=1 to N do if m[i,j] = True then inc(count[i]);
    if (count[i] mod 2)<>0 then
    begin
      writeln('Нет цикла');
      readkey;
      halt;
    end;
  end;
  stack1:=nil;
  stack2:=nil;
  Write('Начальная вершина: '); readln(v);
  if (v<=N) then Push(v, stack1);
  While stack1<>NIL do
  Begin
    v:=peek(stack1);
    i:=1;
    While (i<=n) and not m[v,i] do inc(i);
    If i<=n then
    Begin
      u:=i;
      Push(u, stack1);
      m[v,u]:=False;
      m[u,v]:=False;
    End
    else
    Begin
      pop(x,stack1);
      push(x,stack2)
    End;
  End;
  PrintList(stack2);
  readkey;
End.
кому нужна помощь! жду в аське и скайпе!
Филантроп вне форума Ответить с цитированием
Старый 25.04.2010, 10:26   #3
Ikram
 
Регистрация: 24.04.2010
Сообщений: 5
По умолчанию

Спасибо большое-)
А как выглядит информация внутри файла
Ikram вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Turbo pascal. MacFly Помощь студентам 1 23.01.2010 12:38
Turbo pascal. Innocence Помощь студентам 1 16.12.2009 04:44
а free pascal не читает задачи которые написаны на turbo pascal? demonara Паскаль, Turbo Pascal, PascalABC.NET 3 25.05.2009 16:28
Turbo Pascal Jasper92 Помощь студентам 17 25.04.2009 14:17