
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");
}
}