С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 5
1

Перебор всевозможных состояний массива

13.11.2015, 22:00. Показов 2015. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Задача:
Дан двумерный массив(скажем, 4х4) заполненный рандомным образом числами, причем числа могут быть только +1 и -1(условно говоря, два варианта заполнения ячейки массива). Нужно перебрать и зафиксировать всевозможные состояния(конфигурации) данного массива(а таких состояний 216).

Пробовал решать через рекурсию и трехмерный массив. Ни к чему дельному так и не пришел.

Подскажите пожалуйста, как наиболее корректным способом перебрать и зафиксировать конфигурации массива?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2015, 22:00
Ответы с готовыми решениями:

Перебор всевозможных комбинаций, изменяемая длина и диапазон
Обгуглился уже, где - то может и видел то, что нужно, но в силу тупизны счёл не тем. Брут в...

Получение всевозможных комбинаций массива
необходимо получить всевозможные комбинации массива Исх. массив : 1,2,3 Комбинации : 1,2,3;...

Перебор элементов массива
Господа,является ли метод do_something_with_value (*iter); в коде перебора , частью API ,или это...

Перебор элементов массива
Добрый день, ув. форумчане. В наличии следующий код: int i; WCHAR *slovo = {L"слово1",...

6
Модератор
Эксперт С++
13721 / 10918 / 6478
Регистрация: 18.12.2011
Сообщений: 29,147
13.11.2015, 22:32 2
Будем значение -1 записывать цифрой 0, тогда все комбинации 16 бит дадут последовательные числа от 0x0000 до oxffff=216-1
1
0 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 5
15.11.2015, 22:56  [ТС] 3
Суть уловил, но как это реализовать? С помощью кодов Грея? Или рекурсивного перебора?

Не могли бы вы в общих чертах набросать программу?
Был бы очень благодарен.
0
0 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 5
16.11.2015, 23:28  [ТС] 4
Суть уловил, но как это реализовать? С помощью кодов Грея? Или рекурсивного перебора?

Не могли бы вы в общих чертах набросать программу?
Был бы очень благодарен.
0
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
16.11.2015, 23:58 5
Лучший ответ Сообщение было отмечено alex_31 как решение

Решение

Цитата Сообщение от alex_31 Посмотреть сообщение
но как это реализовать?
Прибавлением к числу 0 единички 216-1 раз
Цитата Сообщение от alex_31 Посмотреть сообщение
заполненный рандомным образом
А это здесь при чем?

Добавлено через 5 минут
Реализация:
C++
1
2
3
4
5
6
7
8
for(i=0, p=1; i<16; i++, p*=2) ; // p=2 в 16-той, чтобы вручную не считать
for(i=0; i<p; i++) {
  for(j=0; j<16; j++) {
    k = ((i<<j) &1) ? 1 : -1;
    a[J/4][j%4] = k;
  }
  // Вывод  (фиксация) массива a
}
2
0 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 5
19.11.2015, 00:05  [ТС] 6
Спасибо! В итоге реализовал таким способом, но ваша программа изрядно помогла разобраться в побитовых операторах.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        for(i = 0; i < 65536; i++)
        {
            for(j = 0; j < 4; j++)
                for(k = 0; k < 4; k++)
                {
                    if(i&(1<<((j<<2)+k)))
                    {
                        LatticeOfSpins[j][k]=1;
                    }else
                    {
                        LatticeOfSpins[j][k]=-1;
                    }
                }
        }
0
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
19.11.2015, 00:24 7
Цитата Сообщение от alex_31 Посмотреть сообщение
но ваша программа изрядно помогла разобраться в побитовых операторах.
Приятно слышать, но у меня там опечатка в строке 5. следует читать
C++
1
a[j/4][j%4] = k;
0
19.11.2015, 00:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2015, 00:24
Помогаю со студенческими работами здесь

Перебор элементов массива
Доброго времени! Я новичек в С++, поэтому прошу не ругать. Вопрос - как организовать перебор...

Поменять местами пары элементов в массиве
дан массив целых чисел. поменять местами пары элементов в массиве: 1 и2,3 и 4,5 и 6 и т.д.

Перебор символьного массива
Помогите, не могу написать прграмму которая добавляет символ. Например: вводим...

Перебор сумм чисел массива
Собственно по одному предмету делаю курсач, и хотелось бы себя наверняка перепроверить, да и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru