2017-07-16 49 views
-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; 
    } 

回答

0

是的,你可以使用上的数字有些算法假设N = 4,732

为了让千位,你可以做(​​INT )n/1000。

要获得百位数你这样做:((INT)N/100)%10

的十位数,(3)你这样做:((INT)N/10)%10

和依此类推...并将每个值放入整列数组的一个块中

可以循环完成