Скачиваний:
10
Добавлен:
01.05.2014
Размер:
120.32 Кб
Скачать

Интерфейс в режиме работы пользователя.

Режим работы: пользователь

Доступные действия:

1) Выбор станции отправления

2) Выбор станции прибытия

3) Поиск самого быстрого маршрута

4) Поиск маршрута ограниченной стоимости

1. Выбор станции отправления.

Режим работы: пользователь -> выбор станции отправления

───────────────────────────────────────────────────────

►Один

Два

Три

Четыре

Пять

Шесть

Для перемещения курсора используйте стрелки, для выхода из режима <Esc>.

2. Выбор станции прибытия. Аналогично предыдущему пункту.

3.Поиск самого быстрого маршрута.

Режим работы: пользователь -> самый быстрый маршрут

───────────────────────────────────────────────────

Режим работы: пользователь -> ввод времени отправления

------------------------------------------------------

Введите время отправления (в формате ЧЧ:ММ)

12:35

При вводе проверяется правильность введенной строки.

Структура файла расписания. Стандартный файл расписания Time.Txt

Первая строка содержит один символ с кодом 0.

Далее идет список имен станций, каждое на своей строке.

Пустая строка.

Список соединений станций в формате: # [<номер_станции>,<номер_станции>,…]. На первой строке список станций, соединенных с первой, на второй – со второй и т.д. Решетка в начале строки обязательна.

Пустая строка.

Таблица расписания в формате: # <откуда> <куда> <отправление> <прибытие> <стоимость>. Откуда, куда – номера станций, отправление, прибытие – время в формате ЧЧ:ММ, стоимость – число (0..65000).

Описание алгоритмов.

Для поиска кратчайшего пути используется алгоритм Дейкстры.

Дано:

• Граф G=<V,E> с выделенным источником s∊V;

• W[u, v] – матрица весов дуг, u, v ∊V; W[u, v]<>0

Результат: Расстояния от источника s до всех вершин графа DL[v]=d(s,v), v ∊V;

Begin

For v ∊V do DL[v]:=W[s,v]; DL[s]:=0;

T:= V \ {s}; { S={s} }

While T<>{ } do

Begin

u:= произвольная вершина x∊T, такая, что DL[x] = min { DL[p] : p∊T };

T:=T \ {u}; { S:=S+{u} }

For v ∊T do DL[v] := min { DL[v], DL[u]+W[u,v] }

End {while}

End

Единственная модификация состоит в том, что вместо матрицы весов – списки смежности, а расстояния определяются по таблице расписания. Алгоритм работает таким образом, что ищет самый быстрый путь, но при этом количество пересадок не всегда минимальное, зато время ожидания поезда на остановке минимальное. Граф должен быть связным для завершения работы алгоритма. В процессе работы алгоритма в качестве побочного результата устанавливается связность графа.

Используемые типы.

const

MaxStations=20;

MaxLines=10; {число строк расписания для каждой ветки. Ограничение связано

только со сложностью просмотра исходных данных}

MaxLength=25;{максимальная длина названия станции.

Для корректной работы не должно превышать 25}

type

ArrString=array[1..MaxLength] of char; {имя вершины - массив символов}

Timestr=string[5]; {строка, представляющая время в формате ЧЧ:ММ}

TimeTableString=string[17]; {строка таблицы расписания}

TTime=word; {время - число минут прошедшее с 00:00}

TRoute=record {маршрут:}

DepTime:TTime; {время отправления}

ArrTime:TTime; {время прибытия}

Price:word {стоимость билета}

end;

{строка расписания - список поездов между двумя станциями}

PTimeTableElem=^TTimeTableElem;

TTimeTableElem=record {элемент расписания:}

Route:TRoute; {маршрут}

Next:PTimeTableElem {указатель на следующий маршрут}

end;

{список станций, до которых ходят поезда с этой станции}

PDestination=^TDestination;

TDestination=record {ребро графа}

Where:byte; {куда}

TimeTable:PTimeTableElem; {когда и сколько стоит}

TimeTableLines:byte; {число строк в таблице расписания}

NextStation:PDestination; {следующая станция}

end;

{железнодорожная сеть - граф, вершины которого станции}

TVertex=record {вершина - станция}

Name:ArrString; {название}

Connections:PDestination; {список станций, до которых ходят поезда}

end;

TVertices=array[1..MaxStations] of TVertex; {массив вершин графа}

TGraph=record

Number:byte; {число вершин}

Vertices:TVertices {вершины}

end;

TAdditionalData=record {вспомогательная информация о вершине, для поиска}

VLabel:Integer; {метка, содержит минимальное время, за которое можно добраться до станции}

VTime:PTimeTableElem; {указатель на строку таблицы расписания}

Attr:boolean {метка принадлежности к непросмотренным ребрам}

end;

{массив дополнительной информации о вершинах}

TVertexArray=array[1..MaxStations] of TAdditionalData;

TWayElem=record {элемент пути}

Station:byte; {номер станции}

time:PTimeTableElem; {указатель на строку расписания}

end;

TWay=array[1..MaxStations] of TWayElem; {путь}

Соседние файлы в папке Информационная система железнодорожной сети