Да, я знаю, что это ничего нового, и есть много вопросов, которые уже есть (у него даже есть свой тег), но я бы хотел создать Soloku Solvo на Java исключительно для цели тренируя себя, чтобы писать более эффективный код.Построение ЭФФЕКТИВНОГО решения Sudoku
Возможно, самый простой способ сделать это в программе - тонна циклов для каждого цикла и столбца, собрать возможные значения каждой ячейки, а затем отсеивать ячейки только одной возможностью (только они содержат 1, или они являются единственной ячейкой в их строке/столбце, которая содержит это число), пока у вас не будет решена головоломка. Конечно, явная мысль о действии должна поднять красный флаг в уме каждого программиста.
То, что я ищу, - это методология, позволяющая максимально эффективно решить эту присоску (пожалуйста, постарайтесь не включать слишком много кода - я хочу сам понять эту часть).
Я хочу избежать математических алгоритмов, если это вообще возможно - это было бы слишком легко и 100% не моя работа.
Если кто-то может обеспечить пошаговый, эффективный процесс мышления для решения головоломки Sudoku (будь то человеком или компьютером), я был бы наиболее счастлив :). Я ищу что-то неопределенное (так это вызов), но достаточно информативный (так что я не совсем потерялся), чтобы начать меня.
Большое спасибо,
Жюстьян Meyer
EDIT:
Глядя на мой код, я начал думать: что бы некоторые из возможностей для хранения этих решающие состояния (т.е. Судоку). На ум приходят 2D массивы и 3D-массивы. Что может быть лучше? 2D может быть проще управлять с поверхности, но 3D-массивы также предоставят номер «box»/«клетка».
EDIT:
Nevermind. Я собираюсь пойти с 3D-массивом.
Кроме того, если вы идете с «сорняком, пока не останется только одна возможность», вы все равно не сможете решить какой-либо судоку. Там есть хороший «суровый» судокус, где вам действительно нужно выполнить какой-то поиск, прежде чем вы сможете убедиться, какой номер поставить где (DFS/BFS). В противном случае, цикл через каждый столбец и т. Д. На самом деле не является - то, что ужасно или неэффективно, если вы настроили структуры данных соответственно, но, как я сказал, он не решит -all-sudokus. – wasatz
@wasatz: Да, я немного поработал и нашел это. Тем не менее, похоже, что многие другие люди нашли более эффективные рабочие места, которые, хотя я ненавижу признавать это, намного выше моего уровня понимания. –
@ Justian, я сделал несколько быстрых поисковых запросов и нашел рекомендации по использованию «Алгоритма танцевальных ссылок» (http://en.wikipedia.org/wiki/Dancing_Links). Я не видел этот алгоритм раньше (и у меня нет на это времени, чтобы прочитать его прямо сейчас), но выглядит многообещающим. Может, стоит взглянуть? :) – wasatz