2009年9月21日月曜日

(49) B search , L search and C search

 g matrix を使うと、
  B search : ブロック ( igrp ) に一つしかない数字 (numb ) をもつセルを探す。これは、gg matrix を使って、gg ( igrp , numb , 2 ) = 1 とあらわすことができる。
 同様にして、
L search : 行 ( ilin ) に一つしかない数字 (numb ) をもつセルを探す。これは、gl matrix を使って、gl ( ilin , numb , 2 ) = 1 とあらわすことができる。
C search : 列 ( icol ) に一つしかない数字 (numb ) をもつセルを探す。これは、gc matrix を使って、gc ( icol , numb , 2 ) = 1 とあらわすことができる。
 B search に対して、実際のプログラムを以下に示す。これらの探索法は SUDOKU_Ver33 から使われている。


Sub B_search()
For igrp = 1 To z
For numb = 1 To z
If gg(igrp, numb, 2) = 1 Then
cc = gg(igrp, numb, 3)
row_column_number
i1 = aa: i2 = bb
Else
GoTo contnumb
End If
If Sheets("Sheet1").Cells(ppp + i1, qqq + i2) <> "" Then GoTo contnumb
Sheets("Sheet1").Cells(ppp + i1, qqq + i2) = numb
numa = numa + 1
Sheets("Sheet6").Cells(numa + 17, 1) = numa - 1
Sheets("Sheet6").Cells(numa + 17, 2) = "(" & i1 & "," & i2 & ")"
Sheets("Sheet6").Cells(numa + 17, 3) = numb
Sheets("Sheet6").Cells(numa + 17, 4) = sch
Sheets("Sheet6").Cells(numa + 17, 21) = 0.01 * (Int(100 * (Timer - timer0)))
Sheets("Sheet6").Range("A18") = numa - 1
Sheets("Sheet1").Range("D6") = numa - 1
contnumb:
Next numb
Next igrp
End Sub

0 件のコメント:

コメントを投稿