2.2 Блок-схема
Инициализация
массива g
i
< n
j
< g[i].length
Mt[g[i][j]]
= i Used[i]
= true
Mt[g[i][j]]
== -1
1
1
Used[i]
== true
i
< n
tryKuhn(i)
Блок-схема 1 – Алгоритм прохода всего графа
used[v]
= true
Mt[to]
== -1 || tryKuhn(mt[to])
Mt[to]
= v return
true
Mt[to]
= v return
true
j
< g[i].length
to
= g[v][i]
used[v]
== true
Блок-схема 2 – алгоритм Куна
3 Программное конструирование
Для реализации данного алгоритма было решено использовать язык Java. Помимо стандартных конструкций языка не было использовано никаких сторонних библиотек.
Более подробное описание функционала программы, пользовательского интерфейса и принципов работы представлено в разделах «Рекомендации пользователю» и «Рекомендации программисту». Исходный код программы представлен в приложении А.
4 Контрольный пример
При запуске программы выпоняется алгоритм Прима для поставленной задачи. Весь ход решения представлен на рисунке 1.
Рисунок
1 – Процесс решения задачи
2
3
1
4
5
Рисунок 2 – Исходный граф
2
3
1
4
5
Рисунок 3 – Конечный граф
5 Рекоменации пользователю
Перед запуском программного средства следует заполнить матрицу весов дуг. Номер строки соответствует началу дуги. Матрица принимает значения вершин в которых заканчивается соответствующая дуга. При заполнении матрицы следует учитывать то, что нумерация индексов массива начинается с 0, так и в матрицу следует вписывать номера вершины меньше на 1. То есть если дуга заканчивается в вершине 1, то вписать следует 0 и так далее.
6 Рекомендации программисту
Программное средство реализовано на языке Java с использованием SDK Eclipse и подключенной JRE 1.7.
Код состоит из 1 класса :
Kuhn – класс, реализующий алгоритм Куна.
Класс Kuhn.
Класс реализует алгоритм Куна. В качестве входящих параметров в конструктор передается двудольный граф.
Видимость |
Тип |
Идентификатор |
Применение / назначение |
private |
int |
n |
Число вершин в первой доле |
private |
int |
k |
Число вершин во второй доле |
private |
int |
g |
Массив, хранящий двудольный граф |
private |
boolean |
Used |
Массив хранящий значение об использовании вершин |
private |
Int |
mt |
Дополнительная матрица, хранящая информацию о текущем паросочетании |
Таблица полей класса Kuhn
Видимость |
Тип |
Идентификатор |
Применение / назначение |
Public |
boolean |
tryKuhn |
Метод выполняющий алгоритм Куна |
public |
void |
main |
Точка входа программы, вывод результата алгоритма |
Таблица методов класса Kuhn
