如何制作没有重复行的网格9x9? (例)

时间:2012-03-07 01:43:11

标签: c# matrix grid nested-loops

我试图制作网格9x9,没有像这样重复的行号

   4 6 1 | 9 5 3 | 8 2 7
   5 6 8 | 3 1 2 | 7 4 9
   1 8 9 | 3 6 4 | 2 5 7
   ---------------------
   4 9 6 | 2 1 3 | 5 8 7
   6 4 5 | 9 1 3 | 8 2 7
   7 4 8 | 6 9 3 | 2 5 1
   ---------------------
   7 8 5 | 2 1 4 | 3 9 6
   7 5 2 | 4 8 9 | 3 6 1
   7 9 1 | 8 4 2 | 5 3 6

不要担心----和| | |

我所做的是:

 int[,] y = new int[9, 9];
            Random rnd = new Random();
            int count = 0;
            for (int i = 1; i < y.GetLength(0); i++)
            {

                for (int j = i-1; j < y.GetLength(0); j++)
                {

                    //int s = rnd.Next(1, 10);

                    if (j != i )
                    {
                        y[i, j] = j;
                        count++;
                    }

                    for (int k = count; k < j; k++)
                    {
                        y[i, j] = j - i;
                        Console.Write(" " + y[i, j]);
                    }
                    Console.Write(" " + y[i, j]);



                }
                Console.WriteLine();
            }

它给了我

0 0 2 3 4 5 6 7 8

1 0 3 4 5 6 7 8  2 0 4 5 6 7 8  3 0 5 6 7 8  4 0 6 7 8  5 0 7 8  6 0 8  7 0

2 个答案:

答案 0 :(得分:1)

所以你需要的是阅读有关回滚的数独算法。你需要做的主要是:

  

创建一个方法,检查每一行和每一列以及每一列   框(3x3)以确保没有重复(1到9)

您需要找出哪个数字可以放在空方格中并随机选择一个。如果您别无选择,则需要退回几步并重新开始,或者只需清除整个网格。

很久以前,这篇文章是我wrote

答案 1 :(得分:0)

您没有在要求中提及行必须是随机的,只是它们不能重复;

如何将每行的最后一个数字推到下一行的第一个数字。

所以你可以制作一个列表或数组 1 2 3 4 5 6 7 8 9

矩阵的第一行是当前顺序的数组。

接下来的迭代,取9并在开头插入,你的第二个矩阵行将如下所示:

9 1 2 3 4 5 6 7 8

这样做9次,最终没有重复的行。这是基于循环算法,这种算法稍微复杂一点,但用于安排体育比赛,所以球队在联盟中的所有球队都没有上过两次之前从不参加同一支球队。

你能从这个解释中构建c#吗?