-1
要对8皇后问题中的1600万个组合进行排序,我使用一个8位数字,其中每个数字代表一列,数字的值是该行。没有数字可能会重复。我的函数接受一个数字,将其转换为字符串,然后转换为char数组,然后转换为int数组。有一个更简单的方法来到达int数组吗?c#解决与int数组八个女王?
而且,在这段代码中使用任何优化:
private bool IsValidSolution(int MyInt)
{
string sNum = MyInt.ToString();
int iVal = 0;
int i, k, j;
// Eliminate row and column conflicts.
char[] aChars = sNum.ToCharArray();
int[] aInt = Array.ConvertAll(aChars, c => (int)Char.GetNumericValue(c));
// The first false in the array is just a placeholder. Of interest are positions 1 - 8).
bool[] aCheck = new bool[] { false, false, false, false, false, false, false, false, false, false };
for (i = 0; i < 8; i++)
{
iVal = aInt[i];
if (iVal == 0 || iVal == 9) return false;
if (aCheck[iVal] == false)
{
aCheck[iVal] = true;
} else {
return false;
}
}
// Eliminate diagonal conflicts.
for (k = 0; k < 7; k++)
{
j = k + 1;
for (i = j; i < 8; i++)
{
if (Math.Abs(aInt[k] - aInt[i]) == Math.Abs(k - i)) return false;
}
}
return true;
}