Поиск в ширину - Prolog
Формулировка задачи:
Пытаюсь запустить следующий код из Братко:
Выдает False. Не пойму в чем дело. Помогите пожалуйста разобраться. В глубину все работает. Вот если что ссылка на книгуhttp://coollib.com/b/183629/read
Это работает.
Листинг программы
- после(a,b).
- после(b,d).
- после(d,h).
- после(b,e).
- после(e,i).
- после(e,j).
- после(a,c).
- после(c,f).
- после(f,k).
- после(c,g).
- цель(j).
- решить( Старт, Решение) :-
- вширину( [ [Старт] ], Решение).
- вширину( [ [Верш | Путь] | _ ], [Верш | Путь] ) :-
- цель( Верш).
- вширину( [ [В | Путь] | Пути], Решение ) :-
- bagof( [B1, В | Путь ],
- ( после( В, В1), not принадлежит( В1, [В | Путь])),
- НовПути),
- % НовПути - ациклические продолжения пути [В | Путь]
- конк( Пути, НовПути, Пути1), !,
- вширину( Путь1, Решение);
- вширину( Пути, Решение).
в глубину вот:
Листинг программы
- решить( В, [В] ) :-
- цель( В).
- решить( В, [В | Реш1] ) :-
- после( В, В1 ),
- решить( В1, Реш1).
Решение задачи: «Поиск в ширину»
textual
Листинг программы
- после(a,b).
- после(b,d).
- после(d,h).
- после(b,e).
- после(e,i).
- после(e,j).
- после(a,c).
- после(c,f).
- после(f,k).
- после(c,g).
- цель(j).
- решить( Старт, Решение) :-
- вширину( [ [Старт] ], Решение).
- вширину( [ [Верш | Путь] | _ ], [Верш | Путь] ) :-
- цель( Верш).
- вширину( [ [В | Путь] | Пути], Решение ) :-
- bagof( [В1, В | Путь ],
- ( после( В, В1), not(member( В1, [В | Путь]))),
- НовПути),
- % НовПути - ациклические продолжения пути [В | Путь]
- append( Пути, НовПути, Пути1), !,
- вширину( Пути1, Решение);
- вширину( Пути, Решение).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д