|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
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 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Не понимаю как с такими знаниями вы до графов добрались.
|
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 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
Код:
А вот это Код:
Последний раз редактировалось MaTBeu; 25.05.2008 в 17:01. |
25.05.2008, 17:03 | #30 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
Эх, парень... ты бы определися, что тебе помогать: писать новую прогу или исправлять старую, а то то одно, то другое.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск Эйлерова цикла в графе | 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 |