C/C++の宿題を片付けます 81代目

このエントリーをはてなブックマークに追加
867デフォルトの名無しさん
課題1 図1 (a)の初期状態のように3×3のマス目に1〜8の番号が付いたパネルが配置されている。
ここで、右下角は何も置けないようになっている。この状態から、次のルールに従ってパネルを移動して目標状態にする問題を考える。
●4つの隣接するパネルを時計回りに回転させることができる。
●4つの隣接するパネルの和が5の倍数のときには回転させることができない。
例えば、図1(b)の場合、移動前の状態から左上の4枚(5,8,2,3)を時計回りに回転させると、移動後の状態になる。
なお、移動前の状態では他に右上の4枚(8,1,3,7)も回転されることは可能であるが、右下の4枚(2,3,6,4)は合計が5の倍数になるので、回転させることはできない。

図1
http://cocoa.gazo-ch.net/bbs/18/img/200701/1198816.jpg


(1).問題を定式化せよ。
(2).(1)に基づいて、目標状態に至るまでの手順を縦型探索、横型探索、A*(エースター)アルゴリズムにより探索するプログラムを作成せよ。
ヒューリスティック値は各自でいろいろ設定してみて、最適なものを探してみること。
言語はCを用いること。また、状態を保持するリストは配列のように保持可能な要素数が固定されるものでなく、ポインタなどを利用して保持可能な要素数を動的に変更可能なものを使用すること。
各探索における結果や時間や記憶領域に関する計算量の実測値を比較したり、設定したヒューリスティックが有効であったかどうか、その理由も考察してみること。

ながいですがよろしくお願いします。だれか教えてください。