2014-01-19 3 views
1

В основном для задания мне нужно создать программу на C#, которая будет принимать номер в качестве ввода (n), а затем создать размер 2D-массива n * n с номерами от 1 до (n * n). Он должен использовать метод грубой силы. Я сделал это, но в настоящий момент программа будет просто произвольно генерировать порядок чисел каждый раз, поэтому иногда будет проверять один и тот же порядок более одного раза. Очевидно, это означает, что для проверки любого числа выше 3 требуется очень много времени, и даже для 3 это может занять несколько минут. В основном мне интересно, есть ли у меня какой-то способ сделать это, только проверив каждый заказ один раз. Мне разрешено использовать только «базовые» функции C#, поэтому просто такие вещи, как *, /, +, - и ничего подобного .Shuffle и т. Д.Алгоритм алгоритма магии квадратных квадратов

+0

Можете ли вы написать свою собственную функцию тасования? Это очень легко сделать. – Dukeling

+0

1) показывает нам, что у вас есть до сих пор, и 2) что вы подразумеваете под Brute Force, и почему вы должны использовать его? 3) Если вы действительно имеете в виду настоящую грубую силу (исчерпывающий поиск всех возможных комбинаций), она, очевидно, имеет серьезный экспоненциальный рост для этой проблемы, даже три должны быть медленными. – RBarryYoung

+0

Исходя из того, что вы сделали, я предполагаю, что эти числа должны быть случайным образом распределены в сетке (не только начиная с 1 в левом верхнем углу). Это верно? – Dukeling

ответ

1

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

Я предлагаю вам поместить все число 1 ... (n * n) в массив и найти всю перестановку.

Когда у вас есть все перестановки, легко создать квадрат (1 .. n ==> первая строка, n + 1 ... 2n ==> вторая строка и т. Д.).

Теперь найти все перестановки можно сделать с основной работой с рекурсией

3

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

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

http://ericlippert.com/2013/04/15/producing-permutations-part-one/

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