Как я могу сделать сетку 9x9 без повторяющихся строк? (пример) - PullRequest
0 голосов
/ 07 марта 2012

Я пытался сделать сетку 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 ]

1 голос
/ 07 марта 2012

Итак, вам нужно прочитать об алгоритме судоку с откатом. В основном вам нужно сделать следующее:

Создайте метод, который будет проверять каждую строку и каждый столбец и каждый поле (3х3), чтобы убедиться в отсутствии дублирования (от 1 до 9)

Вам необходимо выяснить, какое число можно поместить в пустой квадрат, и выбрать случайным образом. Если у вас нет выбора, вам нужно откатиться на несколько шагов назад и начать заново, или просто очистить всю сетку.

Я написал эту статью давным-давно.

0 голосов
/ 07 марта 2012

Вы ничего не упомянули в требовании, чтобы строки были случайными, просто чтобы их нельзя было дублировать;

Как насчет того, чтобы последний номер каждой строки стал первым номером в следующей строке.

Так что вы можете сделать список или массив 1 2 3 4 5 6 7 8 9

Первая строка матрицы - это массив в текущем порядке.

Следующая итерация, возьмите 9 и вставьте в начало, и ваша вторая строка матрицы будет выглядеть так:

9 1 2 3 4 5 6 7 8

Сделайте это 9 раз, и у вас не будет повторяющихся строк. Это основано на алгоритме круговой игры, который немного сложнее, но используется для планирования спортивных игр, поэтому команды никогда не играют в одной команде дважды до того, как сыграли все команды в лиге.

Можете ли вы построить c # из этого объяснения?

...