Ответ в теме: Поиск в глубину в задаче про пять супружеских пар

      Комментарии к записи Ответ в теме: Поиск в глубину в задаче про пять супружеских пар отключены
#1881

Я ошибся про поиск в ширину.
Правило dfs менять не надо вообще.

Изменить надо запрос:

?- dfs(([ma,mb,mc,md,me,fa,fb,fc,fd,fe],[],[],left),[],Path),
   printpath(Path).

Достаточно убрать в конце запроса отсечение (восклицательный знак) и машина логического вывода пролога будет искать все решения. Вам выводится решение — нажимайте точку с запятой чтобы получить следующее.
Либо можно записать запрос так:

?- dfs(([ma,mb,mc,md,me,fa,fb,fc,fd,fe],[],[],left),[],Path),
   printpath(Path), fail.

Но решений тут очень много. Я не думаю, что «получить все решения» — это хорошая идея.

В статье я использовал предикат print для вывода пути, но тогда я не знал что есть одноименный встроенный предикат. На самом деле, он просто выводит список в столбик, чтобы можно было нормально прочитать путь.
Используйте примерно вот такой предикат для этой цели:

printpath([]):-!.
printpath([H|T]):-
    write(H), nl, printpath(T).