Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика Санек.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
198.01 Кб
Скачать

7 Заключение

В ходе проделанной работы было разработано программное средство, реализующее алгоритм нахождения максимального паросочетания.

Конечная программа точно следует все правилам алгоритма, учитывая все возможные ситуации.

Конечной целью данной работы является освоение алгоритма Куна.

8 Список использованных источников

1. Электронный ресурс JavaTalks.com :

Url:-[www.javatalks.com/algs/trees/AlgKuhn.html]

2. Свободная электронная энциклопедия «Википедия» :

Url:- [http://ru.wikipedia.org/wiki/АлгоритмКуна],

Url:-[ http://wikipedia.org/wiki/Kuhn]

Приложение А. Код программы

class Kuhn {

static int k, n;

static Integer[][] g = {{1, 2}, {0, 1, 2}, {3, 4}, {4, 0}, {0}};

static Integer[] mt = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};

static Boolean[] used = {false, false, false};

public static boolean tryKuhn(Integer v) {

System.out.println("Проверяется вершина " + v);

if (used[v]) {

System.out.println("Вершина уже использовалась!");

return false; }

used[v] = true;

for (int i=0; i<g[v].length; ++i) {

int to = g[v][i];

if (mt[to] == -1 || tryKuhn (mt[to])) {

mt[to] = v;

System.out.println("Добавляем вершину в текущий список паросочетаний");

return true;

}

}

return false;

}

public static void main(String args[]) {

Boolean[] used1 = {false, false, false};

for (int i=0; i<3; ++i)

for (int j=0; j<g[i].length; ++j)

if (mt[g[i][j]] == -1) {

mt[g[i][j]] = i;

used1[i] = true;

break;

}

for (int i=0; i<3; ++i) {

if (used1[i]) continue;

tryKuhn(i);

}

System.out.println("Исходный граф : ");

for (int i = 0; i < g.length; i++) {

System.out.print("Вершина " + (i+1) + " ");

for (int j = 0; j < g[i].length; j++) {

System.out.print("<" + (i+1) + ", " + (g[i][j]+1) + "> ");

}

System.out.println();

}

System.out.println("\nСписок паросочетаний : ");

for (int i=0; i<n; ++i)

if (mt[i] != -1)

System.out.print((mt[i]+1) + " " + (i+1) + "\n");

}

}