四角に切れ www.nikoli.com四角に切れのお試し問題 *1 例題(パズルのルールより) 9 8 4 2 2 4 解答 4 2 2 5 6 8 4 4 6 5 6 8 4 7 6 7 6 4 4 3 9 8 4 4 3 4 4 2 4 4 2 6 8 8 ルール *1参照のこと 盤面を長方形か正方形の区画に切り分けてゆく。 ①各区画には必ず一つの数字が入る。 ②切り分けた区画には数字と同じ数のマスがなければならない。 ③解き終わったらマスは余らない。(数字の合計=マスの総数になっている。) 数字6ならば、1x6、2x3のようにマスを纏めたコマを用意し、ジグゾーパズルのように 埋め込んで行く。整数計画法よりも、それ以前の準備作業の方が手間が掛かる。 数字には左上から順に番号を振って区画番号とする。 J → 1 2 変数 I 1 ↓ 2 マスの行番号をI、列番号をJとして c(I,J,K) = 1 = 0 マス (I,J) が区画Kのとき 〃 でないとき 3 . . . Nr p(K,L,M) = 1 = 0 姿勢と数字位置 数字2のとき 姿勢1 姿勢2 区画Kのコマが姿勢L、数字位置Mのとき 〃 でないとき 数字位置1 2 数字位置2 数字位置1 2 2 数字位置2 2 3 4 . . . Nc 数字4のとき 姿勢1 ①②③④ ① ② ③ ④ 姿勢2 姿勢3 ①∼④は4の数字が来る数字位置 ① ② ③④ その他問題に応じて適当な数まで決めておく。 目的関数 minimize (ダミー) x 制約式 subject to 1.マスはどれかの区画に属するから、 Nk c(I,J,K) Σ K=1 = 1 (I=1,2….…Nr) (J= 1,2.…… Nc ) Nkは総区画数 ただし、区画Kの存在可能な(I,J)の範囲は 調べておき、c(I,J,K)はその範囲のマスのみ とする。(変数があまり多くならないように) 2.区画Kに書かれた数字をSとすると、c(I,J,K)の区画K内の合計はSだから Nr Nc Σ Σc(I,J,K) I=1 J=1 = S (K=1,2….…Nk) 3.コマはどれかの姿勢、数字位置をとるから、 NL NM Σ Σp(K,L,M) L=1 M=1 = (K=1,2….…Nk) 1 NLは区画Kの数字の姿勢数 NMは区画Kの数字の数字位置数 4.p(K,L,M)=1のときc(I,J,K)=1となるマスをセットする 区画Kの数字座標を(In,Jn)とすると c(In±I,Jn±J,K) ≧ p(K,L,M) (K=1,2….…Nk) (L=1,2….…NL) (M=1,2….…NM) (IはL,Mで調整) (JはL,Mで調整) いいかげんなかきかたであるが 実際は数字ごとに相当ややこしい 上下界 bounds 変数型 binary c(I,J,K) (K=1,2….…Nk) (I=1,2….…Nr) (J=1,2….…Nc) p(K,L,M) (K=1,2….…Nk) (L=1,2….…NL) (M=1,2….…NM) 終端 end
© Copyright 2024 ExpyDoc