【モリタポ有償】C/C++/Java の問題を片付けます(4)

このエントリーをはてなブックマークに追加
542 ◆QZaw55cn4c
http://toro.2ch.net/test/read.cgi/tech/1342966104/745
1.http://codepad.org/XCQbDsSK
2.http://codepad.org/M1zjzeHZ

1.ほぼ問題文にしたがい穴埋め。
2.は順列を >>667 の 3 にしたがって生成する点では問題文と同様であるが、角道チェックは順列の数字がひとつ確定するたびに行っており、無駄な局面の生成を省くようにしている。

ヒント
順列の生成について、4-queen ならば int a[8] の状態配列を生成している。このうち前半 a[0]〜a[3] は順列生成のために使用しており、後半 a[4]〜a[8] がクイーンの置き場を示す。
a[4] は x = 0 のときのクイーンの y 座標、a[5] は x = 1 のときのクイーンの y 座標、以下、n-queen 問題において座標 (x, a[n + x]) にクイーンが置かれているものとする。
この局面表現(解表現)により、飛車道チェックのロジックを省くことができ、角道チェックのみ記述すればよい。