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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2008, 16:09   #21
<Бананан>
Пользователь
 
Регистрация: 25.05.2008
Сообщений: 24
По умолчанию

procedure DeepSearch(G:TGraphMatrix;bv:intege r);
var Used: array of boolean;
i: integer;
M: array of array of boolean;

вот так он прям на доске писал
<Бананан> вне форума Ответить с цитированием
Старый 25.05.2008, 16:09   #22
<Бананан>
Пользователь
 
Регистрация: 25.05.2008
Сообщений: 24
По умолчанию

Расширение "Способы обхода графа"

Общие сведения
Расширение позволяет проиллюстрировать на выбранном графе произвольного вида два способа обхода вершин графа: обход в глубину и обход в ширину. Расширение обладает собственным интерфейсом. Возможно пошаговое или автоматическое выполнение обходов, начиная с произвольной вершины. Вычисляются связанные с обходами характеристики графов.

Алгоритмы обхода
Многие алгоритмы на графах требуют систематического перебора вершин графа, при котором каждая вершина посещается ровно один раз. Существует два основных метода такого перебора, которые анализируют каждое ребро графа не более одного раза.

Алгоритм обхода вершин "в глубину" (рекурсивный вариант):
var Used:array of boolean;// Массив индикации посещённых вершин
SetLength(Used,Gr.VertexCount);

Procedure DeepSearch(v:integer);
var i: integer;
Procedure DS(v:integer);
var k:integer;
begin
Действие над вершиной v
Used[v]:=true;
for k {вершины, смежные с v} do begin
if not Used[k] then begin
DS(k);
end;
end;
end;
begin
DS(v);
// Просмотр остальных компонент связности
for i:=1 to Gr.VertexCount do
if not Used[i] then DS(i);
end;

Алгоритм обхода вершин "в ширину" (без рекурсии):

var Used:array of boolean;// Массив индикации посещённых вершин
q:TVQueue;// Очередь вершин, посещаемых на каждом шаге выполнения алгоритма
SetLength(Used,Gr.VertexCount);

Procedure WideSearch(v:TVIndex);
var i: integer;
Procedure WS(v:TVIndex);
var j,k: integer;
begin
q.Push(v);
Used[v]:=true;
while not q.Empty do begin
j:=q.Pop;
Действие над вершиной j
for k {вершины, смежные с j} do
if not used[k] then begin
q.Push(k);
Used[v]:=true;
end;
end;
end;
begin
WS(v);
// Просмотр остальных компонент связности
for i:=1 to Gr.VertexCount do
if not Used[i] then WS(i);
end;
<Бананан> вне форума Ответить с цитированием
Старый 25.05.2008, 16:10   #23
<Бананан>
Пользователь
 
Регистрация: 25.05.2008
Сообщений: 24
По умолчанию

Вот тут-то тоже нет конца первой процедуры??? я обхожу в глубину....
<Бананан> вне форума Ответить с цитированием
Старый 25.05.2008, 16:12   #24
<Бананан>
Пользователь
 
Регистрация: 25.05.2008
Сообщений: 24
По умолчанию

А прога должна быть такого плана, только моя должнасчитать циклы длиной 4:
{------------------------------------------------------------------------------}
{
Простой пример курсовой/лабораторной работы, подключаемой к системе СТРИН
Программа читает файл INPUT.TXT, содержащий один граф в формате матрицы
смежности,
выдает список вершин степени 1 и 2 в
OUTPUT.TXT.
Для упрощения, для ориентированных графов за степень вершины принимается
полустепень исхода.
}
{------------------------------------------------------------------------------}

program degree12;

uses
Graphs;

{ функция для вычисления степени вершины Vertex }
function GetDegree(Graph: TGraphMatrix; Vertex, VertexCount: Integer): Integer;
var i, deg: Integer;
begin
deg := 0;
for i := 0 to VertexCount-1 do
deg := deg + Graph[Vertex, i];
GetDegree := deg;
end;

var Graph: TGraphMatrix; { матрица смежности графа }
VertexCount: Integer; { число вершин графа }
i, count, deg: Integer;
F: TextFile;
begin
{ загружаем граф из файла в формате матриц смежности }
Graph_LoadFromMatrixFileName('INPUT .TXT', Graph, VertexCount);
{ подсчитываем число вершин степени 1 и 2 }
count := 0;
for i := 0 to VertexCount-1 do
begin
deg := GetDegree(Graph, i, VertexCount);
if (deg=1) or (deg=2) then
count := count+1;
end;
{ выдаем результаты }
{ обязательные результаты в файл OUTPUT.TXT }
AssignFile(F, 'OUTPUT.TXT');
Rewrite(F);
{ записываем число вершин }
Writeln(F, count);
{ записываем список вершин; нумеруем вершины от 1 }
for i := 0 to VertexCount-1 do
begin
deg := GetDegree(Graph, i, VertexCount);
if (deg=1) or (deg=2) then
Writeln(F, i+1);
end;
CloseFile(F);
end.
<Бананан> вне форума Ответить с цитированием
Старый 25.05.2008, 16:13   #25
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Не понимаю как с такими знаниями вы до графов добрались.
puporev вне форума Ответить с цитированием
Старый 25.05.2008, 16:18   #26
<Бананан>
Пользователь
 
Регистрация: 25.05.2008
Сообщений: 24
По умолчанию

О, это долгая история) При этом на первом курсе!!)))
<Бананан> вне форума Ответить с цитированием
Старый 25.05.2008, 16:30   #27
<Бананан>
Пользователь
 
Регистрация: 25.05.2008
Сообщений: 24
По умолчанию

Вот значит, прграмма компилируется полнотью, но что-то не работат(((((

program cycle_;

{$APPTYPE CONSOLE}

uses
SysUtils,Graphs;

const
MAX_VERTEX_COUNT=50;

{procedure Graph_LoadFromMatrixFile(var F:TextFile;var G: TGraphMatrix;
var VertexCount: integer);}

{procedure DeepSearch(G:TGraphMatrix;bv:intege r);
var Used: array of boolean;
i: integer;
M: array of array of boolean;}

procedure DSRec(v:integer);
var TmpV: integer;
k: integer;
Used: array of boolean;
M: array of array of boolean;
VertexCount: integer;
begin
k:=0;
Used[v]:=true;
for TmpV:=0 to Pred(VertexCount) do
if M[TmpV,v] then begin
if not Used[TmpV] then begin
k:=k+1;
Used[Tmpv]:=true;
DSRec(TmpV);
if k=4 then
Used[TmpV]:=false;
{k:=k-1;
if not Used[TmpV] then
Used[TmpV]:=false;}
end;
end;
end;

var VertexCount: Integer; { ÷èñëî âåðøèí ãðàôà }
F: TextFile;
G:TGraphMatrix;
TmpV:integer;
Used: array of boolean;
begin
{ çàãðóæàåì ãðàô èç ôàéëà â ôîðìàòå ìàòðèö ñìåæíîñòè }
Graph_LoadFromMatrixFileName('INPUT .TXT', G, VertexCount);
AssignFile(F, 'OUTPUT.TXT');
for TmpV := 0 to (VertexCount-1) do
begin
DSRec(TmpV);
if Used[TmpV]=false then begin
Rewrite(F);
Writeln(F, TmpV+1);
end;
CloseFile(F);
end;
end.
<Бананан> вне форума Ответить с цитированием
Старый 25.05.2008, 16:34   #28
<Бананан>
Пользователь
 
Регистрация: 25.05.2008
Сообщений: 24
По умолчанию

Как сделать чтбы она искала циклы длины 4??? Напишите, плиз))
<Бананан> вне форума Ответить с цитированием
Старый 25.05.2008, 16:57   #29
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Код:
procedure Graph_LoadFromMatrixFile(var F:TextFile;var G: TGraphMatrix;
var VertexCount: integer);

procedure DeepSearch(G:TGraphMatrix;bv:integer);
Я конечно в Делфи не совсем разбираюсь... но помоему это прототипы процедур...А сами процедуры в каком-то другом юните находятся.
А вот это
Код:
var Used: array of boolean;
i: integer;
M: array of array of boolean;
я думаю можно вставить после трех эндов.

Последний раз редактировалось MaTBeu; 25.05.2008 в 17:01.
MaTBeu вне форума Ответить с цитированием
Старый 25.05.2008, 17:03   #30
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Эх, парень... ты бы определися, что тебе помогать: писать новую прогу или исправлять старую, а то то одно, то другое.
MaTBeu вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск Эйлерова цикла в графе Danion Помощь студентам 3 22.05.2010 18:47
Массив неопределённой длины Влажимир Общие вопросы Delphi 2 01.04.2008 10:14
определение длины динамич. массива Романнн Общие вопросы Delphi 3 11.03.2008 18:48
Сортировка двумерного массива произвольной длины. Visual Basic Pekc Помощь студентам 0 25.11.2007 19:30
Оператор цикла с предусловием While. Оператор цикла с пост условием Repeat McMilin Помощь студентам 7 11.11.2007 14:10