Задача о любви без взаимности - Prolog
Формулировка задачи:
Задача о любви без взаимности
помогите начинающему чем сможете. И да, если можно, не меняйте сильно метод и структуру.
Решение задачи: «Задача о любви без взаимности»
textual
Листинг программы
PREDICATES
male(string) /*Парни*/
female(string) /*Девушки*/
love(string,string)
sol(string, string, string, string, string, string) /*решение*/
print.
CLAUSES
/*заполняем людей*/
male("Kolya").
male("Dima").
male("Yura").
female("Anya").
female("Lena").
female("Vika").
love(X, Y):- male(X), female(Y).
love(Y, X):- male(X), female(Y).
love("Kolya", Y):-love(Y, X), love(X, "Lena").
love("Dima", Y):-love(Y, X), love(X, "Vika").
love("Lena", X):- male(X), not (X="Yura").
sol(X1, X2, X3, Y1, Y2, Y3):-
male(X1), male(X2), male(X3),
female(Y1), female(Y2), female(Y3),
love(X1, Y1),
not(love(Y1,X1)),
love(X2, Y2),
not(love(Y2,X2)),
love(X3, Y3),
not(love(Y3,X3)),
/*Каждый человек должен быть только один раз*/
X1<>X2,
X1<>X3,
X2<>X3,
Y1<>Y2,
Y1<>Y3,
Y2<>Y3.
/*Печать результатов.*/
print:- sol(X1, X2, X3, Y1, Y2, Y3),
write(X1, " - ", Y1, ". ",
X2, " - ", Y2, ". ",
X3, " - ", Y3, ". ").
Объяснение кода листинга программы
- Создаются шесть человек: Коля, Дима, Юра, Аня, Лена, Вика.
- Задаются три пары людей, которые любят друг друга: Коля любит Лену, Дима любит Вику, а Лена любит Юру.
- Три пары людей, которые не любят друг друга: Коля не любит Диму, Дима не любит Колю, а Юра не любит Лену.
- Оформляется факт того, что каждый человек должен быть только один раз: Коля не может быть Димой или Юрой, Дима не может быть Колей или Юрой, а Юра не может быть Колей или Димой.
- Аналогично оформляется факт того, что каждая девушка должна быть только один раз: Аня не может быть Леней или Викой, Лена не может быть Аней или Викой, а Вика не может быть Аней или Леной.
- Формулируется основная задача: нахождение шести пар людей, которые любят друг друга.
- Для решения этой задачи используется метод перебора всех возможных комбинаций пар людей и проверки условий, что они любят друг друга, а их имена не совпадают.
- Если найдена пара людей, удовлетворяющая всем условиям, то она выводится на экран.
- Если не найдено ни одной пары людей, удовлетворяющей всем условиям, то выводится сообщение об этом.