我在c#上制作数独游戏

时间:2015-02-08 13:11:29

标签: c# matrix time

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的矩阵,其中每列和每行包含每个数字一次。 问题是当我运行代码时,不是每次我得到一个输出,我认为问题不是每一组第一行和列都可以根据需要给出一个矩阵进入一个无休止的循环。 我想要做的是将每个示例的应用程序的运行时间限制为100 ms,因此如果矩阵未填充,程序将重新启动 我错过了什么代码?

2 个答案:

答案 0 :(得分:0)

用循环替换while( d != 0 ),循环计数到一定的非常大的最大迭代次数。 (尝试1000,100000,无论如何。)

答案 1 :(得分:0)

您是否尝试在数组的第一行中的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];
}