ラッシュアワーというパズルを解くプログラムです。 プログラム中の以下のリストが問題そのものを表しています。 gvar(initial_pos, [ [h,2,2,2], [h,3,0,0], [v,2,3,0], [v,3,4,0], [v,3,5,0], [v,2,0,1], [h,2,1,1], [h,2,0,3], [v,2,2,3], [v,2,1,4], [h,2,4,4], [h,2,2,5], [h,2,4,5] ]). 最初の要素が外に出す自分の車、 それ以外の要素が他の車をあらわしています。 車の情報の見方なのですが、 [h,3,0,2]という記述の場合は ・横向き(horizontalのh、縦向きの場合はverticalのv) ・大きさ3マス ・車の左上が(0,2)の座標 に存在する車を示しています 座標系 X 0---5 Y 0 | | 5 入力内容 % library(win_menu) compiled into win_menu 0.00 sec, 34 clauses Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 6.4.1) Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details. For help, use ?- help(Topic). or ?- apropos(Word). 1 ?- [rush_br]. Warning: c:/documents and settings/koyahata/my documents/prolog/rush_br.pl:35: Singleton variables: [First] % rush_br compiled 0.02 sec, 67 clauses true. 2 ?- tell(rush_br). true. 3 ?- search_main. false. 4 ?- halt. -------------------------------------------------------------------- rush_br 出力結果 注:以下は使用中のメモリサイズを出力しています(byte)。   最高値を更新したときのみ出力しています   (メモリを大量に使う幅優先探索というアルゴリズムを使用していて、使用メモリの確認のため) 14408 15880 16248 16816 19320 21852 24384 26916 29448 31952 32024 32396 33068 34840 37344 39848 42352 44884 47388 49920 52452 55012 57544 60076 62636 65140 66880 67208 67424 67516 67920 68236 注:以下は車をどのような手順で動かすかの解答を出力しています [[h,2,0,2],[h,2,2,2]]という記述の場合は ・横向き(horizontalのh、縦向きの場合はverticalのv) ・大きさ2マス ・(0,2)の座標 に存在する車を座標(2,2)まで移動するということを示しています [[h,2,0,2],[h,2,2,2]] [[h,2,2,2],[h,2,1,2]] [[v,2,3,0],[v,2,3,2]] [[h,3,0,0],[h,3,1,0]] [[v,3,5,0],[v,3,5,1]] [[v,2,0,1],[v,2,0,0]] [[h,2,1,2],[h,2,0,2]] [[v,2,2,3],[v,2,2,2]] [[h,2,4,4],[h,2,2,4]] [[v,3,4,0],[v,3,4,2]] [[h,3,1,0],[h,3,3,0]] [[h,2,1,1],[h,2,3,1]] [[v,2,2,2],[v,2,2,0]] [[h,2,0,2],[h,2,1,2]] [[h,2,0,3],[h,2,1,3]] [[v,2,0,0],[v,2,0,4]] [[h,2,1,2],[h,2,0,2]] [[h,2,1,3],[h,2,0,3]] [[v,2,2,0],[v,2,2,2]] [[h,3,3,0],[h,3,1,0]] [[v,3,5,1],[v,3,5,0]] [[h,2,3,1],[h,2,0,1]] [[v,2,3,2],[v,2,3,1]] [[v,3,4,2],[v,3,4,0]] [[v,2,2,2],[v,2,2,1]] [[h,2,0,3],[h,2,4,3]] [[v,2,0,4],[v,2,0,3]] [[v,2,1,4],[v,2,1,3]] [[h,2,2,4],[h,2,4,4]] [[h,2,2,5],[h,2,0,5]] [[v,2,3,1],[v,2,3,4]] [[v,2,2,1],[v,2,2,4]] [[h,2,0,2],[h,2,2,2]] [[h,2,0,1],[h,2,2,1]] [[v,2,0,3],[v,2,0,0]] [[h,2,4,3],[h,2,2,3]] [[v,3,4,0],[v,3,4,1]] [[h,3,1,0],[h,3,2,0]] [[v,2,1,3],[v,2,1,0]] [[h,2,2,2],[h,2,0,2]] [[h,2,2,3],[h,2,0,3]] [[v,2,3,4],[v,2,3,2]] [[v,2,2,4],[v,2,2,2]] [[h,2,4,4],[h,2,0,4]] [[v,2,3,2],[v,2,3,3]] [[v,2,2,2],[v,2,2,3]] [[h,2,4,5],[h,2,2,5]] [[v,3,4,1],[v,3,4,3]]