C ++ перестановки указанных частей в 2D массиве - PullRequest
0 голосов
/ 19 января 2011

У меня есть два простых двумерных массива (представленных как map ), заполненных 1 и 0.

    | A | B | C | D | sum
--------------------------
  A | 0 | 1 | 1 | 1 |  3
  B | 1 | 0 | 0 | 0 |  1
  C | 1 | 0 | 0 | 1 |  2
  D | 1 | 0 | 1 | 0 |  1

это представление графика ,поэтому таблица симметрична главной диагонали (ни один элемент не имеет отношения к себе / нет рекурсии /).Мне нужно генерировать перестановки указанных столбцов / строк.Я знаю, что есть функция next_permutation () , но я не знаю, как ее использовать (для двумерного массива, представляющего график), я думаю, мне нужно написать собственный алгоритм для просто возврата индекса из 2 столбцов / строкдля переключения.Я не могу понять, что я переписал бы всю таблицу только из-за переключения 2 столбцов / строк.

И самое сложное, что переключение всех строк / столбцов не является необходимым, когда есть строки, которыеимеет уникальную сумму - эти столбцы / строки (в моем случае A) могут остаться на своем месте, потому что ясно, к какому члену во второй таблице они принадлежат (= больше нет членов с таким же количеством отношений).

После того, как я смогу генерировать перестановки AD (ее таблицы), я могу сравнить сгенерированную таблицу со второй и проверить, совпадают ли они (это то, что я уже сделал).

Как я могуделать перестановки?

1 Ответ

0 голосов
/ 19 января 2011

Есть только 64 варианта двунаправленных графов, которые вы описываете с 4 вершинами. Другими словами, ваш график содержит 6 бит информации и поэтому его легко построить из чисел от 0 до 63.

...