![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 06.06.2008
Сообщений: 1
|
![]()
program SPathL;
{********************************** *****************} { Кратчайшее расстояние между двумя вершинами графа } {********************************** *****************} uses Crt, LESync; const N = 6; { Кол-во строк в матрице } M = 7; { Кол-во столбцов в матрице } type List = ^Element; Element = record ID : Byte; Inf : LongInt; Next : List; end; { record } RefNode = ^Node; RefArc = ^Arc; Node = record ID : Byte; Next : RefNode; ArcList : RefArc; end; { record } Arc = record ID : Byte; Inf : Integer; Next : RefArc; Adj : RefNode; end; { record } IMatrix = Array [1..N, 1..M] of Integer; var InputFile : Text; { Входной файл с матрицей графа } Min : LongInt; { Локальный минимум } GraphMatrix : IMatrix; { Матрица графа } i, j : Byte; { Счётчики } Graph : RefNode; { Сам граф в виде списка с подсписками } LHead : List; StartNode, FinishNode : Byte; { Начальная и конечная вершины } LocalStart : RefNode; { Локальная стартовая вершина } Temp : RefArc; p, q, TmpL : List; {********************************** *******************************} procedure InsertNode (var NodeList : RefNode; Num : Byte); var p, q : RefNode; begin New(q); q^.ID := Num; q^.ArcList := nil; q^.Next := nil; if NodeList = nil then NodeList := q else begin p := NodeList; while p^.Next <> nil do p := p^.Next; p^.Next := q; end; { if..else } end; { InsertNode } procedure InsertArc (FromNode, ToNode : RefNode; x : Integer; Num : Byte); var q, p : RefArc; begin if (FromNode = nil) or (ToNode = nil) then WriteLn('Ошибка! Узел не найден!') else begin New(q); q^.ID := Num; q^.Inf := x; q^.Adj := ToNode; q^.Next := nil; if FromNode^.ArcList = nil then FromNode^.ArcList := q else begin p := FromNode^.ArcList; while p^.Next <> nil do p := p^.Next; p^.Next := q; end; { if..else } end; { if..else } end; { InsertArc } function SearchNode (NodeList : RefNode; Num : Byte) : RefNode; begin while (NodeList <> nil) and (NodeList^.ID <> Num) do NodeList := NodeList^.Next; if NodeList = nil then SearchNode := nil else SearchNode := NodeList; end; { SearchNode } procedure GraphInitialize; var q, p, t : RefNode; Weight : Integer; begin Graph := nil; for i := 1 to N do InsertNode(Graph, i); p := Graph; for j := 1 to M do begin for i := 1 to N do begin if GraphMatrix[i, j] > 0 then begin q := SearchNode(p, i); Weight := GraphMatrix[i, j]; end; { if..then } if GraphMatrix[i, j] < 0 then t := SearchNode(p, i); p := p^.Next; end; { for } InsertArc(q, t, Weight, j); p := Graph; end; { for } end; { GraphInitialize } function Minimum (a, b : LongInt) : LongInt; begin if a < b then Minimum := a else Minimum := b; end; { Minimum } |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите пожалуйста найти и исправить ошибку | Sam04 | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 10.06.2008 08:28 |
помогите пожалуйста исправить задачу | kardan | Помощь студентам | 2 | 12.04.2008 10:16 |
Пожалуйста помогите исправить несколько задач | Shatyn | Помощь студентам | 5 | 25.06.2007 20:20 |
Помогите,пожалуйста,исправить задачу... | Загадка | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 21.12.2006 00:42 |