2011-01-18 2 views
0

テーブルは対称であるので、私は、単純な2つの2D 1を充填した(mapとして表される)配列、および0.1C++順列

| 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 

graphの表現であるを有しますメインの対角線(メンバーは自分自身に関係していない/再帰はありません)。 指定した列/行の順列を生成する必要があります。 next_permutation()関数がありますが、(グラフを表す2D配列用の)使用方法がわかりません。切り替えのために2列/行のインデックスを返すだけのアルゴリズムを作成する必要があります。私は、2つのcols/rowsを切り替えるだけで、テーブル全体を書き直すことに気付くことはできません。

最も難しいのは、一意の合計を持つ行がある場合、すべての行/列を切り替える必要はないということです。この列/行(私の場合はA)は、その場所にとどまることができます。彼らが第2の表のどのメンバーに属しているかを明確にする(=同じ数のメンバーを持たない)。

A-D(そのテーブル)の順列を生成できるようになると、生成されたテーブルを2番目のものと比較して同じかどうかを確認できます。

どうすればよいですか?

+0

4つの頂点にすべてのグラフを表示したいのですか? – wich

+0

私はスイッチBとDを持つテーブルを生成する必要があります(どちらも1つの関係を持っています) –

+0

Dはあなたの数学がうまくいかない関係を持っています。 –

答えて

0

4つの頂点を使って説明するように、双方向グラフには64種類しかありません。言い換えれば、グラフには6ビットの情報が含まれているため、0から63までの数字から簡単に構築できます。