C/C++の宿題片付けます 159代目
■ このスレッドは過去ログ倉庫に格納されています
0760デフォルトの名無しさん
2012/09/23(日) 03:09:15.431.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]) にクイーンが置かれているものとする。
この局面表現(解表現)により、飛車道チェックのロジックを省くことができ、角道チェックのみ記述すればよい。
■ このスレッドは過去ログ倉庫に格納されています