\begin{verbatim}
labirinto :- caminho(entrada,Solucao),
reverse(Solucao,Sol_invertida),
write('Caminho: '),
imprima(Sol_invertida), write('\n').
labirinto.
todas_saidas :- labirinto, fail.
imprima([]):- !.
imprima([Cabeca|_]):-objetivo(Cabeca), write(Cabeca),!.
imprima([Cabeca|Cauda]):- !,write(Cabeca), write(','), imprima(Cauda).
imprima(Arg):- write(Arg).
caminho(Nodo_inicial, Solucao):-
busca_largura([[Nodo_inicial]], Solucao).
busca_largura([[Nodo|Caminho]|_],[Nodo|Caminho]):-
objetivo(Nodo).
busca_largura([Nodo|Caminho],Solucao):-
expandir(Nodo, Expansao_do_Nodo),
append(Caminho,Expansao_do_Nodo, Novo_caminho),
busca_largura(Novo_caminho, Solucao).
expandir([Nodo|Caminho],Expansao_do_Nodo) :-
findall([Novo_nodo, Nodo|Caminho],
(conexao(Nodo, Novo_nodo), not(member(Novo_nodo,[Nodo|Caminho]))),
Expansao_do_Nodo), !.
expandir(_,[]).
conexao(A,B) :- liga(A,B).
conexao(A,B) :- liga(B,A).
liga(entrada,7). liga(7,8). liga(7,1). liga(8,14).
liga(8,9). liga(14,20). liga(9,15). liga(20,19).
liga(20,21). liga(15,21). liga(21,22). liga(22,16).
liga(16,10). liga(10,11). liga(11,12). liga(12,18).
liga(12,6). liga(18,17). liga(18,saida2). liga(17,23).
liga(23,saida2). liga(6,5). liga(5,4). liga(1,2).
liga(2,3). liga(3,saida1).
objetivo(saida1).
objetivo(saida2).
\end{verbatim}