配列a[i][j]があります。要素はcharであり、セット{1、...、8}のサブセットとして解釈されます(k番目のビットが1の場合、要素kはサブセットに含まれます)。関連性はないと思いますが、すべての要素に正確に4ビットが設定されています。
すべての行a[1][j] .. a [n] [j]は、{1、...、8}のサブセットのコレクションです。重複する行を削除する必要があります。{1、...、8}の順列によって一方を他方から取得できる場合、2つの行は重複と見なされます。
例(0bxxxxxxxxは2進数を意味します):
0b11000000, 0b01100000, 0b00110000
の複製です
0b00110000, 0b00011000, 0b00100100
前者は順列を適用することで後者から取得できるためです
8->8, 7->7, 6->1, 5->4, 4->3, 3->2, 2->5, 1->6
結果を並べ替えます。
パフォーマンスを考慮して、配列には約2000行が含まれ、各行は最大20個の要素で構成されます。各行はすでに順序付けられており、これが役立つ場合は、行も辞書式順序で並べられています。アルゴリズムの残りの部分はCで記述されているため、Cソリューションが推奨されます。
ご協力いただきありがとうございます。