我正在用 C# 做一个数独游戏

I am making a sudoku on c#

enter code here
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace testing_random
{
    class Program
    {
        static void Main(string[] args)
    {

        int n = 4;
       int[,] a = new int[n,n];//declaring the matrix
        Random o = new Random();
        a[0,0] = o.Next(n);
        for (int i = 1; i < n; i++)//filling the first line
        {
            int d = 1;
            while (d != 0)
            {
                a[i,0] = o.Next(n);
                d = 0;
                for (int j = 0; j < i; j++)
                    if (a[i,0] == a[j,0])
                        d++;
            }
        }
        for (int i = 1; i < n; i++)//filing the first column
        {
            int d = 1;
            while (d != 0)
            {
                a[0, i] = o.Next(n);
                d = 0;
                for (int j = 0; j < i; j++)
                    if (a[0, i] == a[0, j])
                        d++;
            }
        }
        for (int k = 1; k < n; k++)//filling the rest of the matrix
        for (int i = 1; i < n; i++)
        {
            int d = 1;
            while (d != 0)
            {
                a[i, k] = o.Next(n);
                d = 0;
                for (int j = 0; j < i; j++)
                    if (a[i, k] == a[j, k])
                        d++;
                for (int j = 0; j < k; j++)
                    if (a[i, k] == a[i, j])
                        d++;
            }
        }

        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
                Console.Write("{0} ", a[i, j]);
            Console.WriteLine();
        }

        Console.ReadLine();
        }
     }
}

输出应该是一个 4*4 的矩阵,其中每一列和每一行都包含每个数字一次。 问题是当我 运行 代码时,不是每次我得到一个输出,我认为问题不是每组第一行和第一列都可以根据需要给出一个矩阵,我进入了一个无休止的循环。 我想做的是将应用程序的 运行ning 时间限制为每个示例 100 毫秒,因此如果矩阵未填充,程序将重新启动 我缺少哪段代码?

while( d != 0 )替换为一个循环,该循环计算到某个非常大的最大迭代次数。 (尝试 1000、100000,等等。)

您是否要在数组的第一行中随机插入 1-4 之间的数字?如果是这样,还有更简单的方法。

您可以生成要插入到数组中的 4 个数字,然后只需查看数组的第一行并设置每个值。

Random rnd = new Random();
var randomNumbers = Enumerable.Range(1, 4).OrderBy(i => rnd.Next()).ToArray();

for (int i = 0; i < n; i++)
{
   a[i, 0] = randomNumbers[i];
}