Описание проблемы таково. я имею 1
в k
отдельные переменные (например, 1
: грани куба, 2
: вершины куба) и 1
в n_k
экземпляры каждой переменной (продолжая пример выше, n_1 = 6
для каждого лица куба и n_2 = 8
для каждого лица куба). Затем существует группа перестановок, определяющая допустимые перестановки экземпляров переменных. В качестве конкретного примера мы имеем для группы перестановок куб, где f1, f2, f3, f4, f5, f6
шесть лиц (f
переменная 1) и v1, v2, v3, v4, v5, v6, v7, v8
8 лиц (v
переменная 2). Тогда некоторые примеры допустимых перестановок
G = {e, (f1)(f2 f3 f4 f4)(f6)(v1 v2 v3 v4)(v5, v6, v7, v8) ...}
Не беспокойтесь о поиске группы перестановок или о том, как решить, какое лицо соответствует какому fi
или какая вершина к какой vj
, Дело в том, что, хотя обозначение массива удобно хранить перестановку программно (vector<vector<int>> arr
с arr[j][i]
в соответствии со значением, переставленным в положение i
переменной j
), Я должен быть в состоянии быстро определить, какие элементы в каком цикле. Как в примере выше, f2, f3, f4,
а также f5
все в одном цикле.
Для этого я хотел бы сохранить их в представлении циклического обозначения в C ++. Я не могу придумать хороший способ (vector<vector<vector<int>>>
это все, что у меня есть, так как на самом деле я не заинтересован в сохранении имен переменных, просто различая их), чтобы представить это. Быстрый способ рассчитать это или хороший способ сохранить это было бы полезно.
Я знаю, что это не самое четкое объяснение, поэтому не стесняйтесь спрашивать разъяснения.
Задача ещё не решена.
Других решений пока нет …