2016-07-04 9 views
0

Я хочу создать программу, которая будет произвольно генерировать плату судоку для воспроизведения. Для тех, кто не знаком с игрой, вам предоставляется игровая площадка размером 9x9, в основном пустые пространства и некоторые заполненные номера. Чтобы завершить ее, вы должны заполнить пустые квадраты, чтобы в каждой строке, столбце и 3x3 было 1-9 квадрат, но только один раз.Судопищевая логика генерации доски в Java

Способ, которым я в настоящее время представляю, это использовать 2-мерный массив. Я использую цикл for внутри цикла for, чтобы заполнить его, убедившись, что число, идущее в квадрат, никогда не используется в той же строке или столбце.

Проблема, с которой я столкнулась, заключается в том, как проверить, что номер уже используется в 3x3 части сетки. Я думал об использовании 3D-массива, а третье измерение - это то, где хранятся данные 3x3, но я не знаю простого способа решить, какой массив нужно проверить для текущего квадрата.

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

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

Надеюсь, то, что я прошу, имеет смысл, это немного сложно описать в тексте. Я был бы признателен, если бы вы могли дать мне указатель в правильном направлении, не отвечая мне. Также, если вы мало знаете о судоку (почему вы нажмете на этот вопрос), вы можете сыграть его здесь: http://www.websudoku.com/ Если вам нужно уточнение, я отвечу на комментарии так быстро, как смогу.

+0

Ofcoz Есть слишком много вещей, с которыми вы будете в замешательстве. Я думаю, если вы действительно не можете понять это самостоятельно. Вам лучше проверить сообщение, например [this] (http://stackoverflow.com/questions/6924216/how-to-generate-sudoku-boards-with-unique-solutions) – kenshinji

ответ

1

Я попробую дать вам несколько советов, а не дать вам ответы прямо.

Во-первых, его отличная идея использовать массив 2d - это именно то, что такое доска судоку. Что касается вашей идеи 3d-массива, она немного сложна. Подумайте об использовании математических функций, чтобы найти верхний угол каждого окна 3x3 (т.е. [0, 0], [0, 2], [2, 0] и т. Д.) И использовать цикл for для перемещения этого поля 3x3 (все еще в 2d-массив). Что касается создания платы путем случайного ввода чисел, возможно, это не сработает, и создание платы может быть не так тривиально, как вы думаете, если вы хотите, чтобы каждая плата имела только одно правильное решение. Удостоверьтесь, что вы можете сначала проверить срок действия платы, а затем взглянуть на ссылку, отправленную kenshinji.

+0

Хм, я думаю, что представлял себе что-то вроде этого но я не уверен, как найти верхний угол. Я сделаю несколько попыток и посмотрю, смогу ли я найти способ сделать это. Может быть, верхние углы все будут делимы на что-то интересное. Это своего рода фоновый проект, поэтому почти наверняка пройдет какое-то время, прежде чем я получу результат. – Supetorus

 Смежные вопросы

  • Нет связанных вопросов^_^