日期:2014-05-18 浏览次数:21507 次
private void FillArray()
{
for (int m = 0; m < 3; m++)
{
for (int n = 0; n < 3; n++)
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (pArr[m][n][i][j].Default == false)
{//空白格
var pv = GetNumber(new int[4] { m, n, i, j });
if (!pv.Ok)
{
m = pv.Position[0];
n = pv.Position[1];
i = pv.Position[2];
j = pv.Position[3];
ClearAfter(pv.Position);
}
pArr[m][n][i][j].Value = pv.Value;
}
}
}//end small
}
}//end big
}
private PosValues GetNumber(int[] pos)
{
List<int> nums = new List<int>();
for (int n = 1; n <= 9; n++)
{
nums.Add(n);
}
//3宫格内
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
int a = pArr[pos[0]][pos[1]][i][j].Value;
if (a > 0 && nums.Contains(a))
{
nums.Remove(a);
}
}
}
//横向
for (int n = 0; n < 3; n++)
{
for (int j = 0; j < 3; j++)
{
int a = pArr[pos[0]][n][pos[2]][j].Value;
if (a > 0 && nums.Contains(a))
{
nums.Remove(a);
}
}
}
//纵向
for (int m = 0; m < 3; m++)
{
for (int i = 0; i < 3; i++)
{
int a = pArr[m][pos[1]][i][pos[3]].Value;
if (a > 0 && nums.Contains(a))
{
nums.Remove(a);
}
}
}
if (nums.Count == 0)
{
if (posVals.Count == 0)
{
return new PosValues()
{
Value = 0
};
}
var pv = posVals[posVals.Count - 1];
pv.Ok = false;
pv.Value = pv.Values[0];
pv.Values.Remove(pv.Value);
if (pv.Values.Count == 0)
{
posVals.Remove(pv);
}
return pv;
}
else
{
var pv = new PosValues();
pv.Position = pos;
pv.Value = nums[0];
nums.Remove(pv.Value);
pv.Values = nums;
if (nums.Count > 0)
{
posVals.Add(pv);