IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Эйлеров цикл в графе, ОООООООЧЕНЬ СРОЧНО!
сообщение
Сообщение #1


Гость






Задание : написать прогу, находящую и выводящую эйлеров цикл в графе. Граф задан матрицей смежности.
Вот текст самой проги:
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.



Вот матрица смежности в файле:
0 1 1 0 0 0 0 0 0
1 0 1 0 0 0 1 1 0
1 1 0 1 1 0 0 0 0
0 0 1 0 1 0 0 0 0
0 0 1 1 0 1 0 1 0
0 0 0 0 1 0 1 1 1
0 1 0 0 0 1 0 1 1
0 1 0 0 1 1 1 0 0
0 0 0 0 0 1 1 0 0

Должен вывести эйлеров цикл: 1,2,3,4,5,6,7,2,8,9,7,8,5,3,1

Выводит ERROR!

В чем ошибка не могу понять!?
ПОМОГИТЕ, ПОЖАЛУЙСТА!!!!!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Все-таки, в следующий раз, создавай тему с нормальным названием, хорошо?

Ошибка твоя - в том, что из файла данных сначала (перед матрицей смежности) должен читаться ее размер. А размера-то как раз в файле и нет smile.gif

Измени файл данных на такой:
Код
9
0 1 1 0 0 0 0 0 0
1 0 1 0 0 0 1 1 0
1 1 0 1 1 0 0 0 0
0 0 1 0 1 0 0 0 0
0 0 1 1 0 1 0 1 0
0 0 0 0 1 0 1 1 1
0 1 0 0 0 1 0 1 1
0 1 0 0 1 1 1 0 0
0 0 0 0 0 1 1 0 0

и будет тебе счастье...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата(volvo @ 28.06.2006 21:09)
Ошибка твоя - в том, что из файла данных сначала (перед матрицей смежности) должен читаться ее размер. А размера-то как раз в файле и нет smile.gif


VOLVO! О ВЕЛИКИЙ ПРОГРАММИСТ!!! СКОЛЬКО ДУШ ТЫ УЖЕ СПАС!!!!
КАК ГОВОРИТСЯ, ВСЕ ГЕНИАЛЬНОЕ - ПРОСТО!!!!
СПАСИБО ТЕБЕ ОГРОМНОЕ!!!!!!!!!!!!!!!!!!!!!
Я СЧАСТЛИВА!!!!!!!!!
Я ТЕБЯ ОБОЖАЮ!!!!!!!!!!!!!!!!!!!!!!!!!!
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 26.09.2017 8:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"