⑵当前位置设置的数值是否和当前行中的已设置数值重复。
/// <summary>
/// 检查元素的行重复情况
/// </summary>
/// <param name="i">小九宫行号</param>
/// <param name="j">小九宫列号</param>
/// <param name="k">元素在小九宫内的行号</param>
/// <param name="l">元素在小九宫内的列号</param>
/// <param name="IsContainSmall">是否检查小九宫的重复情况</param>
/// <param name="temp_arr">待比较4维数组</param>
/// <returns>是否重复,重复:true,不重复:false</returns>
private bool CheckInRow(int i, int j, int k, int l, bool IsContainSmall,ref int[,,,] temp_arr)
{
bool isRepeat = false;
for (int j1 = 0; j1 < COLUMNS; j1++)
{
for (int l1 = 0; l1 < COLUMNS; l1++)
{
if (IsContainSmall)//包含检查小九宫的值
{
if (j == j1 && l == l1)//跳过自身
{
continue;
}
else
{
if (temp_arr[i, j, k, l] == temp_arr[i, j1, k, l1])
{
return true;
}
}
}
else//不检查小九宫的值
{
if (j == j1)//跳过整个小九宫
{
l1 = COLUMNS;
continue;
}
else
{
if (temp_arr[i, j, k, l] == temp_arr[i, j1, k, l1])
{
return true;
}
}
}
}
}
return isRepeat;
}
在该约束方法中,为了提高检查效率,增加了一个bool型参数IsContainSmall,用来标识是否需要在小九宫中检查。如果之前已经检查过小九宫内的数字重复情况,则将该参数设置为true,此时函数将跳过在小九宫内和当前位置同行的两个数字,从而达到提高检查效率的目的。
⑶当前位置设置的数值是否和当前列中的已设置数值重复。
/// <summary>
/// 检查元素的列重复情况
/// </summary>
/// <param name="i">小九宫行号</param>
/// <param name="j">小九宫列号</param>
/// <param name="k">元素在小九宫内的行号</param>
/// <param name="l">元素在小九宫内的列号</param>
/// <param name="IsContainSmall">是否检查小九宫的重复情况</param>
/// <param name="temp_arr">待比较4维数组</param>
/// <returns>是否重复,重复:true,不重复:false</returns>
private bool CheckInColumn(int i, int j, int k, int l, bool IsContainSmall, ref int[, , ,] temp_arr)
{
bool isRepeat = false;
for (int i1 = 0; i1 < ROWS; i1++)
{
for (int k1 = 0; k1 < ROWS; k1++)
{
if (IsContainSmall)//包含检查小九宫的值
{
if (i == i1 && k == k1)//跳过自身
{
continue;
}
else
{
if (temp_arr[i, j, k, l] == temp_arr[i1, j, k1, l])
{
return true;
}
}
}
else//不包含检查小九宫的值
{
if (i1 == i)//跳过整个小九宫
{
k1 = ROWS;
continue;
}
else
{
if (temp_arr[i, j, k, l] == temp_arr[i1, j, k1, l])
{
return true;
}
}
}
}
}
return isRepeat;
}
同理,在该约束方法中,为了提高检查效率也设置了一个是否检查小九宫的bool型参数IsContainSmall。
|