Случайность в алгоритме решения судоку - PullRequest
1 голос
/ 23 марта 2020

Я использую этот алгоритм решения обратной передачи, который действительно хорош и эффективен

    private void solve()
    {
        for (var y = 8; y >= 0; y--)
        {
            for (var x = 8; x >= 0; x--)
            {
                var a = grid[y, x];
                if (a == 0)
                {
                    for (var n = 1; n <= 9; n++)
                    {
                        if (possible(y, x, n))
                        {
                            grid[y, x] = n;
                            solve();
                            grid[y, x] = 0;
                        }
                    }
                    return;
                }
            }
        }
        print();
    }

Дело в том, что я хочу добавить небольшое изменение, которое я не смог сделать, и вместо этого из числа от 1 до 9, чтобы я выбрал случайное число от 1 до 9, а затем установил его в сетке, без повторения, конечно.

1 Ответ

0 голосов
/ 23 марта 2020
public static class MyRandomGenerator
{
    private static Random random = new Random();

    public static int[] Generate(int inclusiveMinValue, int exclusiveMaxValue)
    {
        if (exclusiveMaxValue <= inclusiveMinValue)
            throw new ArgumentException(nameof(exclusiveMaxValue));

        var capacity = exclusiveMaxValue - inclusiveMinValue;
        var result = new HashSet<int>(capacity);

        while (result.Count < capacity)
        {
            result.Add(random.Next(inclusiveMinValue, exclusiveMaxValue));
        }

        return result.ToArray();
    }            
}
...