要对8皇后问题中的1600万个组合进行排序,我使用一个8位数字,其中每个数字代表一列,数字的值是行。没有数字可能重复。我的函数接受一个数字,将其转换为字符串,然后转换为char数组,然后转换为int数组。是否有更简单的方法来获得一个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;
}
答案 0 :(得分:0)
是的,你可以,使用数字算术,假设n = 4,732
要获得千位数,你可以做(int)n / 1000。
要获得数百位数:((int)n / 100)%10
你做的十位数(3):((int)n / 10)%10
依此类推......并将每个值放在int数组的块中
可以循环完成