2017-12-31 26 views
0

私はプログラミング経験がほとんどないので、練習のために、2次元配列で隣接行列をコーディングしてJavaでグラフを構築したかったのです。具体的には、https://www.cut-the-knot.org/arithmetic/combinatorics/Ramsey44.shtmlという赤いグラフを作成したいのですが、コード化したものは、マトリックスのエッジが少なくて済むようになりました。ここで私はこれまで持っているものです。Javaでグラフの隣接行列をコーディングし、三角形を数える

のpublic static int型[] [] createGraph(){

int[][] graph = new int[17][]; 
for(int i=0; i<17; i++){ 
    graph[i] = new int[i+1]; 
} 

for(int i = 0; i<17; i++){ 
    for(int j = 0; j<=i; j++){ 
    if(i-j == 1 || i-j == 2 || i-j == 4 || i-j == 8){ 
     graph[i][j] = 1; 

    } 
    } 
} 
return graph; 

グラフ内の68個のエッジがありますので、の下三角に68 1つのがあるはずです私が作ろうとしている隣接行列ですが、手作業で計算すると、それを印刷すると59個見つかります。なぜ辺が欠落しているのか分かりません。私は、列番号と行番号の違いに基づいてエッジを割り当てることは、ウェブサイトの「頂点の違い」と同じではないことを推測しています。代わりに私は何をすべきですか?

また、私の次の課題は、グラフの三角形の数を数えることです。私はそれをする方法について考えているが、ヒントを得ることができるだろうか?

+0

構成をマトリックスの三角形に制限していますが、接続ノードのインデックスペアの構成をマトリックスの別の半分に制限することはできません。 - プリントアウトを見てください: 'i-j |> 8 'との間にインデックスのペアがありません。間違っています。 – laune

答えて

0

構成をマトリックスの三角形に制限していますが、接続ノードのインデックスペアの構成をマトリクスの他の部分、つまり対角の「ストリップ」に|i-j| <= 8で制限することはできません。したがって、

if(i-j == 1 || i-j == 2 || i-j == 4 || i-j == 8 || 
    i-j == 9 || i-j == 13 || i-j == 15 || i-j == 16){ 
+0

これは理にかなっているので、重複する権利があるはずです。また、私が下半分の代わりに完全な隣接行列を構成すると、私にとってはより簡単になりますか? –

+0

拡張テストでは、下三角形の外側に配列要素が生成されません。 - 'graph [i] [j]'の設定を追加するだけなので、行列全体を埋めるとあまり変化しません。 – laune

+0

ありがとう!私は今すべて68を数えます!私は今、私の第二の部分に取り組みます。私はそれを見て、予想よりもはるかに計算上困難な問題です。 –

関連する問題