Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Найти все комбинации матрицы


Автор: JavaDell 5.2.2014, 18:41
Есть 2х мерный массив (java)
Код

 int[][] array = new int[3][3];

массив может быть заполнен элементами 0 или 1.

Надо пройти ВСЕ возможные комбинации нулей и единиц в этом массиве. Лупами, без использования рекурсии. Каждую получившуюся комбинацию нужно иметь возможноть сравнить с имеющейся (здесь не дано).
Знаю, что количество полученных комбинаций очень велико, 2^(n*n), но все же.

Автор: Akina 5.2.2014, 20:01
Ну так и запускай цикл от нуля до 2^(n*n). Битовое представление итератора и есть твой массив, только линеаризованный.

Автор: JavaDell 5.2.2014, 20:35
Цитата(Akina @ 5.2.2014,  20:01)
Ну так и запускай цикл от нуля до 2^(n*n). Битовое представление итератора и есть твой массив, только линеаризованный.

Ничего не понял. Итераторы в массивах? Битовые представления? от 0 до 2^(n*n) в одном лупе?

Вы, возможно не так поняли вопрос. Есть к примеру

1 0 0
0 1 1
0 1 0

надо array заполнять по порядку единицами (по умолчанию он заполнен нулями), пока он не станет вида выше.
Вот не пойму, как написать такие циклы, чтобы пройти все возможные комбинации. При том, что размер массива может меняться в рантайме, но всегда остается квадратным: 3x3, 4x4, 5x5...

Извиняюсь, если вопрос глупый, я только учусь.

Автор: Akina 6.2.2014, 08:40
Цитата(JavaDell @  5.2.2014,  21:35 Найти цитируемый пост)
Есть к примеру
1 0 0
0 1 1
0 1 0

Вытягиваем в линию
(100)(011)(010) = 100011010
Далее
Код

n=3
for i = 0 to 2^(n*n)-1
    arr = bin(i, n*n) - представить i в бинарном виде длины n*n
next i

Получаем значения arr:

000000000
000000001
000000010
...
100011001
100011010 - вот оно, соотв. dec(i)=282
100011011
...
111111110
111111111


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)