【问题标题】:c# Solving Eight queens with int array? [duplicate]c#用int数组解决八个皇后? [复制]
【发布时间】:2017-07-16 23:31:50
【问题描述】:

为了对 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;
    }

【问题讨论】:

    标签: c# arrays int


    【解决方案1】:

    是的,你可以,对数字使用一些算术假设 n = 4,732

    要获得千位数,您可以执行 (int) n/1000。

    要获得百位数字:((int) n/100) % 10

    你做的十位数 (3):((int) n/10) %10

    以此类推...并将每个值放在整数数组的一个块中

    可以循环完成

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多