このディレクトリの索引
#  出典: プログラミングのお題スレ Part3 #729
#  
#  お題:○×ゲームで○が勝つ局面までの手順を深さ優先探索ですべて探し出して出力。手順の重複は認めない。
#  

勝ち((1,1),(1,2),(1,3)).
勝ち((2,1),(2,2),(2,3)).
勝ち((3,1),(3,2),(3,3)).
勝ち((1,1),(2,1),(3,1)).
勝ち((1,2),(2,2),(3,2)).
勝ち((1,3),(2,3),(3,3)).
勝ち((1,1),(2,2),(3,3)).
勝ち((1,3),(2,2),(3,1)).

'○×ゲーム'(_勝ち,_着手ならび) :-
        交互着手([(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)],○,×,[],[],_勝ち,_着手ならび).

交互着手(_,_,_手番,_,L2,_手番,[]) :-
        勝ち(L2),!.
交互着手(_着手可能点,_手番,_次の手番,L1,L2,_勝ち,[_着手|_着手ならび]) :-
        select(_着手,_着手可能点,_残り着手可能点),
        交互着手(_残り着手可能点,_次の手番,_手番,L2,[_着手|L1],_勝ち,_着手ならび).

勝ち(L) :-
        勝ち(A,B,C),
        member(A,L),
        member(B,L),
        member(C,L).