ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数...

17
ボンバーパズル 変数 b(I,J) = 1 (I,J) マス に爆弾があるとき =0 ないとき とすると 目的関数 minimize x 制約式 subject to 数字Nのあるマスの座標を(In,Jn)として 例題(2014年2月8日 毎日新聞より) 解答 ルール ①パズル面に隠されたすべての爆弾をつきとめる。 ②爆弾は1マスにつき1個隠れている。 ③数字は、そのマスにタテ・ヨコ・ナナメで接しているマス(最大8マス)に 隠れている爆弾の数を示す。 ④数字のあるマスには爆弾はない。 2 2 4 1 3 5 3 4 3 2 2 43 2 3 2 5 2 3 4 2 2 4 1 3 5 3 4 3 2 2 43 2 3 2 5 2 3 4 ボンバーパズルは、上記ルールの ③④の式を書くとおしまいである。 (ダミー) マスの行番号をI、列番号をJとして b(In-1,Jn-1)+b(In,Jn-1)+b(In+1,Jn-1)+b(In+1,Jn +b(In+1,Jn+1)+b(In,Jn+1)+b(In-1,Jn+1)+b(In- b(In,Jn)=0 (数字のあるマスすべてについて (In+1,Jn-1) など周辺部調整必要) 座標 変数型 binary b(I,J) (I=1,2.Nr) 1,2. …… Nc) 終端 end 2 1 3 4 1 2 3 J I N .. Nc . . . . Nr (J= 上下界 bounds 鉛筆パズルの整数計画法による解法定式化集 1. 2015.07.31 改訂 2016.02.10 追加

Upload: others

Post on 25-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

ボンバーパズル

変数

b(I,J) = 1 (I,J)マス に爆弾があるとき

=0 〃   ないとき

とすると

目的関数 minimize

x

制約式 subject to

数字Nのあるマスの座標を(In,Jn)として

例題(2014年2月8日 毎日新聞より) 解答

ルール

①パズル面に隠されたすべての爆弾をつきとめる。

②爆弾は1マスにつき1個隠れている。

③数字は、そのマスにタテ・ヨコ・ナナメで接しているマス(最大8マス)に 隠れている爆弾の数を示す。

④数字のあるマスには爆弾はない。

2 2 4

1

3 5 3

4 3 2

2 4 3

2 3

2

5

2 3 4

2 2 4

1

3 5 3

4 3 2

2 4 3

2 3

2

5

2 3 4

●● ●

● ● ●

● ● ●

● ●

● ● ● ●

● ●●●

●●

ボンバーパズルは、上記ルールの ③④の式を書くとおしまいである。

(ダミー)

マスの行番号をI、列番号をJとして

b(In-1,Jn-1)+b(In,Jn-1)+b(In+1,Jn-1)+b(In+1,Jn) +b(In+1,Jn+1)+b(In,Jn+1)+b(In-1,Jn+1)+b(In-1,Jn)=N

b(In,Jn)=0

}(数字のあるマスすべてについて

(In+1,Jn-1)

など周辺部調整必要)

座標

変数型 b i n a r y

b(I,J) (I=1,2….…Nr)

1,2.…… Nc )

終端 end

21 3 4

1

2

3

J

I

N

. . Nc.

.

.

.

Nr

(J=

上下界 bounds

鉛筆パズルの整数計画法による解法定式化集 1.

2015.07.31 改訂

2016.02.10 追加

Page 2: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

数字の入ったマスは、変数から除外してしまってもよいが、入力ファイルを作るプログラムに

判定条件が付いてまわり、全マス扱った方がコードが簡単になる。

Excel VBA でCPLEXの .LP形式ファイルを作り出し問題を解くプログラムリストを添付する。

なお、Excelの入力は下図のように、右下に1文字入れてマスの範囲を読むようになっている。

ボンバーパズルでは、数字が最終行、最終列に存在しないということはないが、他のゲーム

では、あることなので統一した。ダイアログを出して行数、列数を入力するのはデバッグの際

面倒である。

1

2

3

4

5

6

7

8

1 2 3 4 5 6 7 8

2 2 4

1

3 5 3

4 3 2

2 4 3

2 5 3

2

2 3 4

E

lp-File output

exec SCIP.exe

read Solution

範囲読み込みよう文字

2015.07.31 改訂 ExcelのCell罫線を読むように変更。

付記、http://puzzlepicnic.com にある Diamonds というパズルはボンバーパズルと同じものである。

こちらは爆弾の総個数を指定するのが標準となっているが、問題を解く上であまり制約として

は働かない。このサイトには沢山の問題が出題されているので、このパズルの好きな人はアクセスしてみるとよい。

Page 3: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

Btn1.txtOption Explicit

Private Sub CommandButton1_Click()Dim I As Integer, J As Integer, K As Integer, L As IntegerDim Ip As Integer, Im As Integer, Jp As Integer, Jm As IntegerDim Nr As Integer, Nc As Integer, Ng As IntegerDim R(20, 20) As IntegerDim Line As String, LineA As StringDim Flag As IntegerDim Ret As Variant, lastRow As Integer, lastCol As Integer' ChDrive Left(Application.ThisWorkbook.Path, 1) ChDir Application.ThisWorkbook.Path' ' find Input Range For I = 1 To 50

Next I ' ' For J = 1 To 50

Nc = J

Next J '' For I = 1 To Nr For J = 1 To Nc If IsNumeric(Cells(I, J)) = True Then R(I, J) = Cells(I, J).Value End If Next J Next I ' For I = 1 To Nr Line = "" For J = 1 To Nc Line = Line & Str(R(I, J)) Next J Debug.Print Line Next I''=================================================================================== Open "BomberPuzzle.lp" For Output As #1'' Write the problem in CPLEX format' variable b(I,J) = 1 when Bomb in cell(I,J) Line = "Minimize" Print #1, Line Line = " value: x" Print #1, Line '' constraints Line = "Subject To" Print #1, Line ' For I = 1 To Nr For J = 1 To Nc Ip = I + 1 Im = I - 1 Jp = J + 1 Jm = J - 1 If R(I, J) > 0 Then Line = " CELL(" & LTrim(Str(I)) & "," & LTrim(Str(J)) & ")_" & LTrim(Str(R(I, J))) & ":" Line = Line & " b(" & LTrim(Str(I)) & "," & LTrim(Str(J)) & ") = 0" Print #1, Line ' Line = " Around(" & LTrim(Str(I)) & "," & LTrim(Str(J)) & ")" & ":" If Im > 0 And Jm > 0 Then Line = Line & " + b(" & LTrim(Str(Im)) & "," & LTrim(Str(Jm)) & ")" End If

ページ(1)

If Cells(I, 1).Borders(xlEdgeBottom).LineStyle = 1 ThenNr = I

End If

If Cells(1, J).Borders(xlEdgeRight).LineStyle = 1 Then

End If2015.07.31 改訂

Page 4: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

Btn1.txt If Jm > 0 Then Line = Line & " + b(" & LTrim(Str(I)) & "," & LTrim(Str(Jm)) & ")" End If If Ip <= Nr And Jm > 0 Then Line = Line & " + b(" & LTrim(Str(Ip)) & "," & LTrim(Str(Jm)) & ")" End If If Ip <= Nr Then Line = Line & " + b(" & LTrim(Str(Ip)) & "," & LTrim(Str(J)) & ")" End If If Ip <= Nr And Jp <= Nc Then Line = Line & " + b(" & LTrim(Str(Ip)) & "," & LTrim(Str(Jp)) & ")" End If If Jp <= Nc Then Line = Line & " + b(" & LTrim(Str(I)) & "," & LTrim(Str(Jp)) & ")" End If If Im > 0 And Jp <= Nc Then Line = Line & " + b(" & LTrim(Str(Im)) & "," & LTrim(Str(Jp)) & ")" End If If Im > 0 Then Line = Line & " + b(" & LTrim(Str(Im)) & "," & LTrim(Str(J)) & ")" End If Line = Line & " = " & LTrim(Str(R(I, J))) Print #1, Line End If Next J Next I' ----------------------------------------------------------------------------------------' binding constraints Line = "Bounds" Print #1, Line' ' ---------------------------------------------------------------------------------------' variables Line = "Binary" Print #1, Line' For I = 1 To Nr Line = "" For J = 1 To Nc Line = Line & " b(" & LTrim(Str(I)) & "," & LTrim(Str(J)) & ")" Next J Print #1, Line Next I' Line = "General" Print #1, Line' ' --------------------------------------------------------------------------------------- Line = "End" Print #1, Line' Ret = MsgBox("BomberPuzzle.lp 作成しました。", vbOKOnly, "ファイル")' Close #1End Sub

ページ(2)

Page 5: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

Private Sub CommandButton2_Click()Dim Line As String' ChDrive Left(Application.ThisWorkbook.Path, 1) ChDir Application.ThisWorkbook.Path' Open "script.txt" For Output As #3 ' Line = "read BomberPuzzle.lp " Print #3, Line Line = "optimize" Print #3, Line Line = "write solution BomberPuzzle.sol" Print #3, Line Close #3'' Open "BomberPuzzle.bat" For Output As #4 Line = "..¥scip.exe < script.txt" Print #4, Line ' Close #4' Call Shell("BomberPuzzle.bat", vbReadOnly)'End Sub

一つ上のフォルダーにある整数計画法プログラム、scip.exe を動かして、BomberPuzzle.lpを

解くバッチファイルを実行する。scip.exeの元の名前にはVersionNoなどが付いていたと思うが

renameして簡略化した。

SCIPの無償使用は、アカデミックユーザーのみとなっていて、ダウンロード画面には、研究所

大学名など入力するようになっているが、その画面を良く見ると、入力しなくてもダウンロード

はできますと書いてある。事実ダウンロードボタンを押しさえすればダウンロードできる。

このソフトはインストール作業を必要とせず、OSが合っていれば、exeファイルをコピーするだけ

で実行できるので、どこかのパソコンにあったらコピーして盗んでくれば使える。営利目的に使用

しているのが見つかると、目の玉の飛び出すような金額を請求される恐れがあるが、個人で使用

する分にはフリーソフトと考えてよい。

Page 6: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

Private Sub CommandButton3_Click() Dim TextLine As String Dim I As Integer, J As Integer, K As Integer, L1 As Integer, L2 As Integer Dim Length As Integer' ChDrive Left(Application.ThisWorkbook.Path, 1) ChDir Application.ThisWorkbook.Path'' Open "BomberPuzzle.sol" For Input As #2 ' Do While Not EOF(2) Line Input #2, TextLine If Left(TextLine, 1) = "b" Then Length = InStr(TextLine, " ") - 1 ' L1 = InStr(TextLine, "(") L2 = InStr(TextLine, ",") I = Val(Mid(TextLine, L1 + 1, L2 - L1 - 1)) J = Val(Mid(TextLine, L2 + 1, Length - L2 - 1)) Cells(I, J) = "●" End If Loop ' Close #2End Sub

SCIPの解析結果ファイル、BomberPuzzle.solを読み込んで、Excel画面に表示する。

Page 7: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

2 2 4

1

3 5 3

2

3

2

5

2 3 4

32

2 4

34

整数計画法によらない解

整数計画法への入力式は、全て等式で一元連立方程式である。直接解いてみよう。

マス座標付きの変数は面倒なので下図のように未知数を置きなおすことにする。

この変数により数字周りの条件式を書きなおすと次ページの表-1のようになる。

x1 x2 x3 x4 x5

x6 x7 x8 x9 x10 x11 x12

x13 x14 x15 x16 x17

x18 x19 x20 x21 x22

x23 x24 x25 x26 x27

x28 x29 x30 x31 x32

x33 x34 x35 x36 x37 x38 x39

x40 x41 x42 x43 x44

Page 8: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

1 1 1 1 1 2

? ? ? ? ? ? ? ?

1 1 1 1 1

1 1 1 1 1

1 1 1 11

1 1 1 11

1 1 1 111 1

1 1 1 111 1

表-1

2

4

1

3

5

3

4

3

2

2

4

3

2

5

3

2

2

3

4

1 1 1 1

1 1 1 1

1 1 1 1 1

1 1 1 1 1

1 1 1 1

1 1 1 1

1 1 1 1 1 1

1 1 1 1

1 1 1

1 1 1

1 1 1

1 1 1

1 1 1

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19x20 x21 x22 x23 x24 x25 x26 x27x28 x29 x30 x31 x32 x33 x34 x35x36 x37 x38 x39 x40 x41 x42 x43x44 =

1

1 1

1 1

1 1

1 1

1 1

1 1 1

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

⑧ x14+x15+x20+x24=4

x14=x15=x20=x24=x30=x31=1

連立一次方程式

⑫ x20+x24+x30+x31=4 から

が直ちに分かるので、代入して表-2。

Page 9: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

1 1 1 1 1 2

? ? ? ? ? ? ? ?

1 1 1 1 1

1 1 1 1 1

1 1 1 11

1 1 1 11

1 1 1 001 1

1 1 1 111 0

表-2

2

4

1

3

3

2

0

1

2

2

0

1

0

4

3

2

2

3

4

0 0 0 0

0 0 1 1

1 1 1 1 1

1 1 1 1 1

0 0 0 0

1 1 0 0

1 0 1 0 1 1

1 1 0 1

1 1 1

1 1 1

1 1 1

1 1 1

1 1 1

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19x20 x21 x22 x23 x24 x25 x26 x27x28 x29 x30 x31 x32 x33 x34 x35x36 x37 x38 x39 x40 x41 x42 x43x44 =

1

1 1

1 1

1 1

1 1

1 1

1 1 1

? ? ? ? ? 1 1 ? ? ? ? 1 ? ? ? 1 ? ? ? ? ? 1 1 ? ? ? ? ? ? ? ? ? ? ? ? ?

⑭ x23+x29+x33+x34+x35=0

x23=x29=x33=x34=x35=0 を代入して、次ページ表-3。

から

Page 10: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

1 1 1 1 1 2

? ? ? ? ? ? ? ?

1 1 1 1 1

1 1 1 1 1

1 1 1 11

1 1 1 11

1 1 1 001 1

1 1 1 111 0

表-3

2

4

1

3

3

2

0

1

2

2

0

1

0

4

3

2

2

3

4

0 0 0 0

0 0 1 1

1 1 1 1 1

1 1 0 1 0

0 0 0 0

1 1 0 0

0 0 0 0 0 0

1 1 0 1

1 1 1

1 0 0

0 0 0

0 1 1

1 1 1

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19x20 x21 x22 x23 x24 x25 x26 x27x28 x29 x30 x31 x32 x33 x34 x35x36 x37 x38 x39 x40 x41 x42 x43x44 =

0

1 1

1 1

1 1

1 1

1 1

1 1 1

? ? ? ? ? 1 1 ? ? ? ? 1 ? ? 0 1 ? ? ? ? 0 1 1 ? 0 0 0 ? ? ? ? ? ? ? ? ?

を代入して、次ページ表-4。

からx41+x42=2

x41=x42=1

Page 11: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

1 1 1 1 1 2

? ? ? ? ? ? ? ?

1 1 1 1 1

1 1 1 1 1

1 1 1 11

1 1 1 11

1 1 1 001 1

1 1 1 111 0

表-4

2

4

1

3

3

2

0

1

2

2

0

1

0

4

3

1

0

2

4

0 0 0 0

0 0 1 1

1 1 1 1 1

1 1 0 1 0

0 0 0 0

1 1 0 0

0 0 0 0 0 0

1 1 0 1

1 1 1

1 0 0

0 0 0

0 1 1

1 1 1

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19x20 x21 x22 x23 x24 x25 x26 x27x28 x29 x30 x31 x32 x33 x34 x35x36 x37 x38 x39 x40 x41 x42 x43x44 =

0

1 1

0 1

0 0

1 0

1 1

1 1 1

? ? ? ? ? 1 1 ? ? ? ? 1 ? ? 0 1 ? ? ? ? 0 1 1 ? 0 0 0 ? ? ? ? ? 1 1 ? ?

を代入して、次ページ表-5。

から-x2-x5-x8-x9+x11-x16-x17=1

x11=1

③-②-④ より

x2=x5=x8=x9=x16=x17=0

0 0

Page 12: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

1 0 1 1 0 2

? 0 ? ? 0 ? ? 0

0 1 0 0 1

1 1 1 0 1

1 0 0 01

1 1 1 11

1 0 1 000 1

1 0 1 101 0

表-5

2

3

1

3

3

1

0

1

2

2

0

1

0

4

3

1

0

2

4

0 0 0 0

0 0 1 1

0 0 1 1 1

1 1 0 1 0

0 0 0 0

1 1 0 0

0 0 0 0 0 0

1 1 0 1

1 1 1

1 0 0

0 0 0

0 1 1

1 1 1

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19x20 x21 x22 x23 x24 x25 x26 x27x28 x29 x30 x31 x32 x33 x34 x35x36 x37 x38 x39 x40 x41 x42 x43x44 =

0

1 1

0 1

0 0

1 0

1 1

1 1 1

0 ? 1 ? ? 1 1 0 0 ? ? 1 ? ? 0 1 ? ? ? ? 0 1 1 ? 0 0 0 ? ? ? ? ? 1 1 ? ?

を代入して、次ページ表-6。

から⑥ x7+x13+x19=3

② x3+x10=2

x3=x7=x10=x13=x19=1

0 0

Page 13: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

1 0 1 0 0 1

? 0 1 ? 0 ? 1 0

0 0 0 0 0

0 1 0 0 1

1 0 0 01

1 0 1 00

0 0 0 000 0

0 0 1 101 0

表-6

0

1

1

0

0

0

0

1

2

1

0

1

0

4

3

1

0

2

4

0 0 0 0

0 0 1 1

0 0 1 1 1

1 0 0 1 0

0 0 0 0

1 1 0 0

0 0 0 0 0 0

1 1 0 1

1 1 1

1 0 0

0 0 0

0 1 1

1 1 1

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19x20 x21 x22 x23 x24 x25 x26 x27x28 x29 x30 x31 x32 x33 x34 x35x36 x37 x38 x39 x40 x41 x42 x43x44 =

0

1 1

0 1

0 0

1 0

1 1

1 1 1

0 1 1 ? 1 1 1 0 0 ? 1 1 ? ? 0 1 ? ? ? ? 0 1 1 ? 0 0 0 ? ? ? ? ? 1 1 ? ?

を代入して、次ページ表-7。

から⑦ x12+x21+x22=0

⑤ x6+x18=0

x6=x12=x18=x21=x22=0

0 0

③と同一になったので消しこみ

Page 14: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

1 0 0 0 0 1

? 0 1 ? 0 0 1 0

0 0 0 0 0

0 1 0 0 0

1 0 0 00

0 0 0 00

0 0 0 000 0

0 0 0 000 0

表-7

0

1

1

0

0

0

0

1

2

1

0

1

0

4

3

1

0

2

4

0 0 0 0

0 0 0 1

0 0 0 1 1

0 0 0 1 0

0 0 0 0

0 1 0 0

0 0 0 0 0 0

1 1 0 1

1 1 1

1 0 0

0 0 0

0 1 1

1 1 1

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19x20 x21 x22 x23 x24 x25 x26 x27x28 x29 x30 x31 x32 x33 x34 x35x36 x37 x38 x39 x40 x41 x42 x43x44 =

0

1 1

0 1

0 0

1 0

1 1

1 1 1

0 1 1 0 1 1 1 0 0 0 1 1 0 0 0 1 ? ? ? ? 0 1 1 ? 0 0 0 ? ? ? ? ? 1 1 ? ?

を代入して、次ページ表-8。から

③ x4=1

① x1=1

x1=x4=x25=x26=x27=x28=1

0 0

⑨ x25=1

⑩ x26+x27=2

⑪ x28=1

Page 15: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

0 0 0 0 0 0

1 0 1 1 0 0 1 0

0 0 0 0 0

0 0 0 0 0

0 0 0 00

0 0 0 00

0 0 0 000 0

0 0 0 000 0

表-8

0

0

1

0

0

0

0

0

0

0

0

0

0

2

1

0

0

2

4

0 0 0 0

0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 0 0 0

0 0 0 1

0 0 1

0 0 0

0 0 0

0 1 1

1 1 1

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19x20 x21 x22 x23 x24 x25 x26 x27x28 x29 x30 x31 x32 x33 x34 x35x36 x37 x38 x39 x40 x41 x42 x43x44 =

0

1 1

0 1

0 0

1 0

1 1

1 1 1

0 1 1 0 1 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 0 1 1 ? 0 0 0 ? ? ? ? ? 1 1 ? ?

を代入して、次ページ表-9。

から

⑳-⑯-⑲

⑰ x40=0

x32=x36=x40=0

0 0

-x32-x36+x44=1

より

x44=1

Page 16: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

0 0 0 0 0 0

1 0 1 1 0 0 1 0

0 0 0 0 0

0 0 0 0 0

0 0 0 00

0 0 0 00

0 0 0 000 0

0 0 0 000 0

表-9

0

0

1

0

0

0

0

0

0

0

0

0

0

2

1

0

0

2

3

0 0 0 0

0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 0 0 0

0 0 0 0

0 0 0

0 0 0

0 0 0

0 0 1

1 1 1

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19x20 x21 x22 x23 x24 x25 x26 x27x28 x29 x30 x31 x32 x33 x34 x35x36 x37 x38 x39 x40 x41 x42 x43x44 =

0

1 0

0 1

0 0

0 0

1 1

0 1 1

0 1 1 0 1 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 0 1 1 0 0 0 0 0 ? ? ? 0 1 1 ? 1

を代入して、次ページ表-10。

から⑮ x37+x38=2

x37=x38=1

0 0

Page 17: ボンバーパズルwavefrontip.la.coocan.jp/ボンバーパズル.pdfボンバーパズル 変数 b(I,J) =1 マス(I,J)に爆弾があるとき =0 〃 ないとき とする と

0 0 0 0 0 0

1 0 1 1 0 0 1 0

0 0 0 0 0

0 0 0 0 0

0 0 0 00

0 0 0 00

0 0 0 000 0

0 0 0 000 0

表-10

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

0 0 0 0

0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 0 0 0

0 0 0 0

0 0 0

0 0 0

0 0 0

0 0 0

0 0 1

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19x20 x21 x22 x23 x24 x25 x26 x27x28 x29 x30 x31 x32 x33 x34 x35x36 x37 x38 x39 x40 x41 x42 x43x44 =

0

1 0

0 1

0 0

0 0

0 1

0 0 0

0 1 1 0 1 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 0 1 1 0 0 0 0 0 1 1 ? 0 1 1 ? 1

で解析終了。

⑯ x39=0

0 0

⑲ x43=1

この例題では、未知数の係数が1と-1ばかりであったが、

2*a-b=0 から a=b=0 を

2*a+b+c-d=3 から a=1 を引き出さなければならない場合がある。