Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Николай П
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 60
#1

перебор массива по количеству вариантов событий - C++

01.02.2013, 22:43. Просмотров 396. Ответов 1
Метки нет (Все метки)

Всем доброго времени суток! Ребят, прошу помощи в решении такой задачи или хотя бы в составлении блок-схемы, я логику теряю, получается полнейшая ерунда(((
Задача:

выбирать из каждой строки по одному значению с единицей и получить двумерные массивы вида:
$rez[колонка][строка] = 1;

описание и примеры:

Допустим у нас такая таблица:

№ строки 1 0 2
_____________________________
1 = |__1__|__1__|__0 _|
2 = |__1__|__0__|__0 _|
3 = |__1__|__0__|__0 _|

Данные из этой таблицы внесены в массив таким образом (изображу откуда и куда):

$win[1][1] = 1;
$win[1][0] = 1;
$win[1][2] = 0;
$win[2][1] = 1;
$win[2][0] = 0;
$win[2][2] = 0;
$win[3][0] = 1;
$win[3][1] = 0;
$win[3][2] = 0;


№ строки 1 0 2
________________________________________________
1 = |__$win[1][1]__|__$win[1][0]__|__0 _|
2 = |__$win[2][1]__|_______0______|__0 _|
3 = |__$win[3][1]__|_______0______|__0 _|

т.е., значения всех ячеек внесены в массив:
$win[строка][колонка] = значение;
и первая строка, хоть и содержит 1 в двух колонках, внесена тоже. Это общий массив со всеми данными из таблицы.
Получается что в этой таблице, судя по единицам, 2 возможных варианта, когда, выбирая из каждой строки по одному значению с единицей, мы получаем двумерные массивы вида:
$rez[колонка][строка] = 1;
количество вариантов такого события мне известно, хранится в переменной $variants. Внесены все эти данные в массив, вот как я распределил данные:

for($ii=1; $ii<$variants+1;$ii++){
for($p=1; $p<16;$p++){
for ($o=0; $o<3;$o++){
$a[$ii][$p][$o] = $win[$p][$o];
}}}

Таким образом получается массив:

$a[$ii][$i][$j] //Это массив, в котором $ii - номер варианта, $i - строка, $j - колонка

При таком разборе у меня получается такой общий массив (я переносы расставил, чтобы по глазам не било):

$a[1][1][0] = 1;
$a[1][1][1] = 1;
$a[1][1][2] = 0;

$a[1][2][0] = 0;
$a[1][2][1] = 1;
$a[1][2][2] = 0;

$a[1][3][0] = 0;
$a[1][3][1] = 1;
$a[1][3][2] = 0;

$a[2][1][0] = 1;
$a[2][1][1] = 1;
$a[2][1][2] = 0;

$a[2][2][0] = 0;
$a[2][2][1] = 1;
$a[2][2][2] = 0;

$a[2][3][0] = 0;
$a[2][3][1] = 1;
$a[2][3][2] = 0;

и нужно из него получить такие массивы:

вот наглядно откуда берется первый вариант массива:
_____________________________
1 = |__$a[1][1][1]__|__1__|__0 _|
2 = |__$a[1][2][1]__|__0__|__0 _|
3 = |__$a[1][3][1]__|__0__|__0 _|

вот наглядно откуда берется второй вариант массива:
_____________________________
1 = |__1__|__$a[2][1][0]__|__0 _|
2 = |__$a[2][2][1]__|__0__|__0 _|
3 = |__$a[2][3][1]__|__0__|__0 _|


Другими словами, должны получиться такие массивы:

$b[1][1][0] = 1; //этот элемент массива разный
$b[1][2][1] = 1;
$b[1][3][1] = 1;
$b[1][4][1] = 1;
$b[1][5][1] = 1;
$b[1][6][1] = 1;
$b[1][7][1] = 1;

$b[2][1][1] = 1; //этот элемент массива разный
$b[2][2][1] = 1;
$b[2][3][1] = 1;
$b[2][4][1] = 1;
$b[2][5][1] = 1;
$b[2][6][1] = 1;
$b[2][7][1] = 1;

Т.е. составить из общего массива данных из таблицы двумерные массивы вида $b[строка][колонка], причем данные взять из соответствующей колонки.

Такую простую таблицу я разобрать могу, трудности возникают в такой, например, комбинации:

№ строки 1 0 2
_____________________________
1 = |__1__|__1__|__0 _|
2 = |__1__|__0__|__0 _|
3 = |__1__|__0__|__1 _|
4 = |__1__|__0__|__0 _|
5 = |__1__|__1__|__0 _|
6 = |__1__|__0__|__0 _|
7 = |__1__|__0__|__0 _|
8 = |__1__|__1__|__1 _|
9 = |__1__|__0__|__0 _|
10 = |__1__|__0__|__0 _|
11 = |__1__|__0__|__1 _|
12 = |__1__|__1__|__0 _|
13 = |__1__|__0__|__0 _|
14 = |__1__|__0__|__1 _|
15 = |__1__|__0__|__0 _|

Помогите, пожалуйста кто чем может. Заранее благодарен!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2013, 22:43     перебор массива по количеству вариантов событий
Посмотрите здесь:
Перебор возможных вариантов разреза трубы C++
Перебор вариантов комбинации слов в строке C++
Перебор всех возможных вариантов с переменными приравненных к определенному значению C++
залить из двумерного массива данные в одномерный длиной, равной количеству всех элементов исходного массива C++
C++ Создание массива для нескольких вариантов ответа
C++ Подсчет количества возможных вариантов формирования массива по условию
C++ Перебор элементов массива
перебор элементов массива C++
C++ Перебор символьного массива
C++ Перебор элементов массива
C++ Сортировка массива в убывающем порядке по количеству появлений методом подсчета
Перебор сумм чисел массива C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
02.02.2013, 05:39     перебор массива по количеству вариантов событий #2
если я правильно понял, то как-то так. только я сразу выводил получившиеся массивы, а не сохранял.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
 
using namespace std;
 
const int rowCount = 5;
const int colCount = 3;
 
void printArr(int arr[rowCount][colCount])
{
    for(int i = 0; i < rowCount; ++i)
    {
        for(int j = 0; j < colCount; ++j)
        {
            cout << arr[i][j] << " ";
        }
        cout << "\n";
    }
    cout << "\n";
}
 
int temp[rowCount][colCount];
void f(int arr[rowCount][colCount], int row = 0)
{
    for(int col = 0; col < colCount; ++col)
    {
        if(!arr[row][col]) continue;
        
        temp[row][col] = 1;
        if(row + 1 != rowCount)
            f(arr, row + 1);
        else printArr(temp);
        temp[row][col] = 0;
    }
}
 
int main()
{
    int a[rowCount][colCount] = {{1, 1, 0},
                                 {1, 0, 0}, 
                                 {1, 0, 0}, 
                                 {1, 0, 1}, 
                                 {0, 0, 1}};
    f(a);
    return 0;
}
Yandex
Объявления
02.02.2013, 05:39     перебор массива по количеству вариантов событий
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru