Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шаповалов / lex_9-1.doc
Скачиваний:
33
Добавлен:
19.04.2015
Размер:
1.36 Mб
Скачать

9.4. Описание программной реализации

Для реализации алгоритмов используем динамическую структуру – двусвязный список. С его помощью можно легко реализовать все алгоритмические операции, так целесообразнее будет сортировать ребра графа в процессе формирования списка, что уменьшает количество производимых операций до минимума. Легко производить удаление из списка ребер, которые приводят к зацикливанию, что не допустимо.

Каждый элемент списка имеет поле weight – вес ребра, point1 – номер начальной вершины, point2 – номер конечной вершины, и идентификатор дерева Tree_ID, к которому принадлежит данное ребро.

Было сформировано два дополнительных модуля – Types и Tools, в которых были описаны вводимые типы данных и вспомогательные процедуры и функции.

Модуль Types

interface

Type PListK = ^TListK; {dinamical structure for Kruskal Algorithm}

TListK = record {data}

weight, {weight}

point1, {pointA}

point2, {pointB}

Tree_ID: integer;{Tree Identificator}

left, {links}

right: PListK;

end;

PListPr = ^TListPr;{structure for Algorithm Prima}

TListPr = record {data}

weight, {weight}

point1,

point2, {ends points}

same: integer;{mark for elements in queue, 0-nothing common,

not 0 - index of the common point}

part: boolean;{mark for ribs - components of spanning tree}

left, {links}

right: PListPr;

end;

var f1, {input data file}

f2:text; {results file}

filename:string;{read from the command line}

n:integer; {number of Points in the Graph}

numRib:integer; {number of Ribs in spanning tree}

compscount: longint; {counters}

movescount: longint;

timescount: longint;

implementation

end.

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

Модуль Tools

unit Tools;

interface

uses Types, DOS;

function NowTimeIs:longint;

procedure ReadFileName;

procedure ErrMsg(Msg: string);

implementation

procedure ErrMsg(Msg: string);

begin

writeln(Msg);

readln;

halt;

end;

function NowTimeIs:longint;

const

c60: longint=60;

var

h, m, s, s100: word;

begin

gettime(h, m, s, s100);

nowtimeis:=((h*c60+m)*c60+s)*100+s100;

end;

procedure ReadFileName;

begin

if paramcount=0 then

begin

writeln('Використання: '+ paramstr(0)+ ' datafile');

writeln('datafile is *.txt file, with the structure:');

writeln('the first line contains only the number of points in Graph');

writeln('next lines contains information about Ribs in the Graph');

writeln('each line for another rib ');

writeln('in order: weight of the rib, start point, finish point');

readln;

halt;

end else begin

filename:=paramstr(1);

assign(f1, filename);

{$I-}

reset(f1);

close(f1);

if (IOResult<>0) or (paramcount>1) then ErrMsg('Невiрне використання!');

{$I+}

end;

end;

end.

Соседние файлы в папке Шаповалов