{*************************************************
** 小マス目の水平・水直方向 を調べる
** lct:TPointの属する小ブロック内
**
**************************************************}
function TForm1.small_area_Check(lct:TPoint):boolean;
var
i,j,x,y : integer;
s_i,s_j : integer;
msg : string;
begin
x := lct.X;
y := lct.Y;
s_i := ( x div 3 ) * 3;
s_j := ( y div 3 ) * 3;
result := True;
for i := s_i to s_i + 2 do
for j := s_j to s_j + 2 do
begin
if Darray[i,j] <> 0 then
continue;
if DArray[x][y] in KnAry[i][j] then
KnAry[i][j] := KnAry[i][j]
- [ DArray[x][y]];
if KnAry[i,j] = [] then
begin
result := False;
exit;
end;
end;
end;
|
( x div 3 ) * 3
( y div 3 ) * 3 として対象となる小マス目
の位置を算出する。
0 -- 0
1 -- 0
2 -- 0 このように対象となる小マス目の
3 -- 3 捜査開始位置を算出する。
4 -- 3
5 -- 3
6 -- 6
7 -- 6
8 -- 6
引数 lct は実際に数値が入っている
マス目の座標
集合配列の検査範囲
マス目の数値が集合要素に含まれていたら
集合要素からマス目の数値を減算する。
結果 [ ] 空集合になったら
中止。
矛盾あり
|