головоломка с массивами: генерация всех возможных комбинаций - PullRequest
0 голосов
/ 28 сентября 2010

Я делаю проект, и эта часть очень важна для меня. Я постараюсь быть максимально ясной.

предположим, что у нас есть матрица mxn со всеми 0, мне нужно сгенерировать все возможные комбинации массива, в которых только один элемент в строке инициализируется в 1, а все остальные элементы в этой строке равны 0. аналогично, во всех строках ровно один элемент должен быть равен 1. Например: возьмите матрицу 3x2, следующим должен быть вывод:

[1 0,1 0,1 0], [1 0, 1 0,0 1], [1 0,0 1,1 0], [1 0, 0 1, 0 1], [0 1 , 1 0,1 0], [0 1, 1 0, 0 1], [0 1, 0 1, 1 0], [0 1, 0 1, 0 1]

значения в квадратных скобках представляют собой матрицу 3x2, каждая строка которой разделена запятой. так что в основном матрица mxn будет иметь n степеней числа m комбинаций. Любой, кто может придумать любой возможный способ решения этой проблемы, публикует его, это действительно важно. заранее спасибо

1 Ответ

1 голос
/ 28 сентября 2010

Поскольку это звучит как домашнее задание, я не собираюсь дать вам полное решение, а скорее несколько шагов в правильном направлении.Начнем с матрицы 3х2.Мы можем решить эту проблему, используя вложенные циклы:

int row0, row1, row2;
for(row0=0; row0<2; ++row0) {
  matrix[0][row0] = 1;
  for(row1=0; row1<2; ++row1) {
    matrix[1][row1] = 1;
    for(row2=0; row2<2; ++row2) {
      matrix[2][row2] = 1;
      print_matrix(matrix);
      matrix[2][row2] = 0;
    }
    matrix[1][row1] = 0;
  }
  matrix[0][row0] = 0;
}

Конечно, это не очень общее решение.Это легко изменить на матрицу 3xm (просто замените row#<2 на row#<m-1), но очевидно, что это не работает для матрицы nxm.Каждый раз, когда мы увеличиваем n на единицу, нам нужно добавить еще один цикл for.

Я оставляю на ваше усмотрение решение, как избавиться от вложенных циклов for, и использовать другой метод для его обобщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...