数独的secend循环,生成求解器

时间:2017-11-07 21:44:19

标签: c#

这是我的第一个问题,对于任何错误都很抱歉。

如何进行第二次循环以生成唯一的行?

每当我添加第二个循环以找到唯一的解决方案程序挂起...

static void Main(string[] args)
    {
        int[,] tab = new int[9, 9];

        Random r = new Random();

        List<int> temp = new List<int>{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };

        for(int i = 0; i < 9; i++)
        {
            for(int j = 0; j < 9; j++)
            {                    
                while (true)
                {
                    bool uniq = true;

                    int randomNumber = r.Next(0, 9);

                    for (int z = 0; z < i; z++)
                    {                       
                        if (randomNumber==tab[z,j])
                        {
                            uniq = false;   
                        }
                     }                    
                     if (uniq == false)
                     {
                        continue;
                     }
                     tab[i, j] = randomNumber;

                     temp.Remove(randomNumber);
                     break;
                }

1 个答案:

答案 0 :(得分:0)

试试这个:

private Random r = new Random();

void Main()
{
    int[,] tab = new int[9, 9];

    List<int> digits = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    for (int i = 0; i < 9; i++)
    {
        List<int> temp = digits.OrderBy(x => r.Next()).ToList();
        for (int j = 0; j < 9; j++)
        {
            tab[i, j] = temp[j];
        }
    }
}