2014.12.24 改訂 ひとりにしてくれ www.nikoli.comひとりにしてくれのお試し問題 *1 解答 例題(パズルのルールより) 1 8 6 2 6 7 5 3 1 8 6 2 6 7 5 3 3 1 1 1 8 2 2 2 3 1 1 1 8 2 2 2 8 3 2 4 7 6 5 1 8 3 2 4 7 6 5 1 3 7 5 8 3 3 1 4 3 7 5 8 3 3 1 4 5 4 4 6 7 1 8 2 5 4 4 6 7 1 8 2 7 1 4 3 2 5 3 5 7 1 4 3 2 5 3 5 2 2 8 3 4 4 7 5 2 2 8 3 4 4 7 5 2 2 3 1 4 4 6 5 2 2 3 1 4 4 6 5 ルール *1参照のこと 以下の条件に従ってマスを塗りつぶす。 ①タテ列でもヨコ列でも、同じ数字があってはいけない。 ②タテかヨコに黒マスが連続してはいけない(斜めはよい)。 ③白マスは全部繋がっていなければならない。 ひとりにしてくれの白マス領域は全体が繋がり難く、ほんとに泣ける。スリザーリンクで使った、 矢の先に矢を繋ぐ方式で、隣接マスの対向矢印禁止にしてもまだ分断するので、やってみた結果から 勝手に作った禁止条件をずらずらと書き並べた。 白マスの全部繋がりは、「へやわけ」方式に変更。 変数 J → 1 2 マスの行番号をI、列番号をJとして b(I,J) = 1 = 0 w(I,J) = 1 = 0 g(I,J,K) = 1 = 0 マス(I,J)を黒く塗りつぶすとき 〃 塗りつぶさないとき マス(I,J)が白マスのとき 〃 3 4 . . . I 1 ↓ 2 3 . . . Nr 白マスでないとき マス(I,J)の数字がKのとき 〃 数字がKでないとき wF(I,J,K) = 1 マス(I,J)が白マスで且つ数字がKのとき 〃 数字がKでないとき = 0 LU(I,J) =1 黒マス(I,J)が左上向き矢印を持つ(左上黒マスとカド接触)とき =0 〃 持たないとき LD(I,J) =1 黒マス(I,J)が左下向き矢印を持つとき =0 〃 持たないとき RU(I,J) =1 黒マス(I,J)が右上向き矢印を持つとき =0 〃 持たないとき RD(I,J) =1 黒マス(I,J)が右下向き矢印を持つとき =0 〃 持たないとき Nc 目的関数 minimize (ダミー) x 制約式 subject to 1.g(I,J,K)をセットする g(I,J,K)=1 または0を問題のテーブルに合わせてセットする。 2.マスは白または黒に塗られるから、 b(I,J)+w(I,J) = 1 (I=1,2….…Nr) (J= 1,2.…… Nc ) 3.白マスで数字Kのものを wF(I,J,K)=1とする g(I,J,K)+w(I,J)-wF(I,J,K) ≦ 1 (K=1,2….…M) Mは最大の数字 (I=1,2….…Nr) (J=1,2….…Nc) wF(I,J,K) ≦ g(I,J,K) wF(I,J,K) ≦ w(I,J) 4.1行の数字は1回しか現れないから、 Nc wF(I,J,K) Σ J=1 ≦ 1 (K=1,2….…M) Mは最大の数字 (I=1,2….…Nr) 5.1列の数字は1回しか現れないから、 Nr wF(I,J,K) Σ I=1 ≦ 1 (K=1,2….…M) Mは最大の数字 (J=1,2….…Nc) 6.白マスは連続しているから、 w(I-1,J)+w(I,J-1)+w(I+1,J)+w(I,J+1) ≧ w(I,J) (I=1,2….…Nr) (J=1,2….…Nc) 7.黒マス2連禁止。 ヨコ b(I,J)+b(I,J+1) ≦ 1 タテ b(I,J)+b(I+1,J) ≦ 1 (I=1,2….…Nr-1) (J=1,2….…Nc-1) 黒マスがこの配置なら どちらかの矢印が付く 8.黒マスに矢印をセットする b(I,J)+b(I-1,J-1)-LU(I,J)-RD(I-1,J-1)≦ 1 (I=1,2….…Nr) b(I,J)+b(I+1,J-1)-LD(I,J)-RU(I+1,J-1)≦ 1 (J=1,2….…Nc) b(I,J)+b(I-1,J+1)-RU(I,J)-LD(I-1,J+1)≦ 1 b(I,J)+b(I+1,J+1)-RD(I,J)-LU(I+1,J+1)≦ 1 9.矢印は白マスに向かない LU(I,J)+w(I-1,J-1) ≦ 1 LD(I,J)+w(I+1,J-1) ≦ 1 RU(I,J)+w(I-1,J+1) ≦ 1 RD(I,J)+w(I+1,J+1) ≦ 1 (I=1,2,....Nr) (J=1,2,....Nc) 10.白マスに矢印は付かない LU(I,J)+w(I,J) ≦ 1 LD(I,J)+w(I,J) ≦ 1 (I=1,2,....Nr) (J=1,2,....Nc) RU(I,J)+w(I,J) ≦ 1 RD(I,J)+w(I,J) ≦ 1 11.矢印は外周から外へは向かない LU(1,J)+RU(1,J) = 0 LD(Nr,J)+RD(Nr,J) = 0 LU(1,J)+LD(1,J) = 0 RU(I,Nc)+RD(I,Nc) = 0 (J=1,2….…Nc) (I=1,2….…Nr) 12.外周では矢印は内向き b(1,J)+b(2,J-1)-LD(1,J)≦ 1 (J=1,2….…Nc) b(1,J)+b(2,J+1)-RD(1,J)≦ 1 b(Nr,J)+b(Nr-1,J-1)-LU(Nr,J)≦ 1 b(Nr,J)+b(Nr-1,J+1)-RU(Nr,J)≦ 1 b(I,1)+b(I-1,2)-RU(I,1)≦ 1 (I=1,2….…Nr) b(I,1)+b(I+1,2)-RD(I,1)≦ 1 b(I,Nc)+b(I,Nc-1)-LU(I,Nc)≦ 1 b(I,Nc)+b(I,Nc-1)-RU(I,Nc)≦ 1 上下界 bounds 変数型 binary b(I,J) w(I,J) (I=1,2….…Nr) (J=1,2….…Nc) wF(I,J,K) (K=1,2….…M) (I=1,2….…Nr) (J=1,2….…Nc) LU(I,J) LD(I,J) RU(I,J) RD(I,J) (I=1,2….…Nr) (J= 1,2.…… Nc ) 終端 end 白マスつなぎに使った黒マス矢印の解析結果を示す。 1 8 6 2 6 7 5 3 3 1 1 1 8 2 2 2 8 3 2 4 7 6 5 1 3 7 5 8 3 3 1 4 5 4 4 6 7 1 8 2 7 1 4 3 2 5 3 5 2 2 8 3 4 4 7 5 2 2 3 1 4 4 6 5
© Copyright 2024 ExpyDoc