2017-08-05 32 views
1

私は現在、(理想的には)igraphを使ってサイクルグラフの隣接行列を生成しようとしています。私は各ユニットをk人の隣人にしたいと思っています。igraphを使用してRでサイクルグラフまたは隣接行列を作成しますか?

library(igraph) 
as_adj(make_graph(c(1, 2, 1, 10, 2, 3, 3, 4, 4, 5 ,5,6, 6,7, 7,8, 8,9, 9, 10), directed = FALSE)) 

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 0 1 0 0 0 0 0 0 0  1 
[2,] 1 0 1 0 0 0 0 0 0  0 
[3,] 0 1 0 1 0 0 0 0 0  0 
[4,] 0 0 1 0 1 0 0 0 0  0 
[5,] 0 0 0 1 0 1 0 0 0  0 
[6,] 0 0 0 0 1 0 1 0 0  0 
[7,] 0 0 0 0 0 1 0 1 0  0 
[8,] 0 0 0 0 0 0 1 0 1  0 
[9,] 0 0 0 0 0 0 0 1 0  1 
[10,] 1 0 0 0 0 0 0 0 1  0 

グラフを作成するためにigraph内の既存の機能を使用する方法は、前述のような存在ですが、一般的なkについて:K = 2の場合

、私が取得するために期待していますか?ありがとう。

+0

> 2。すべてのノードの次数がkとなるようなグラフを求めたいですか? – G5W

+0

@ G5Wはい、それはアイデアです、ありがとう! – user321627

答えて

2

あなたはsample_degseqでこれを行うことができます。

は「多くの場合、特定の頂点度のグラフを作成すると便利です。これは、 はないsample_degseqまさにです。」

k=3 # degree for each node 
n=10 # number of nodes 
g = sample_degseq(rep(k,n),method = "simple.no.multiple") 

隣接:

as_adj(g) 

[1,] . . 1 . 1 
[2,] . . 1 1 . 
[3,] 1 1 . . . 
[4,] . 1 . . 1 
[5,] 1 . . 1 . 

プロット:あなたは "サイクルグラフ" をしたいが、それはkに対して何を意味するのか明確でいないようだと言う

plot(g) 

enter image description here

+0

上記の機能が、互いに接続されていない2つのネットワークをランダムに生成することがあるようです。各ノード間を強制的に接続する方法はありますか?つまり、コードを実行すると、ノード8,6,4がネットワーク上にあり、残りはネットワーク内にあります。ありがとう! – user321627

+0

whileループに入れ、 'edge_connectivity(g)'を使ってグラフに接続されていないネットワークが含まれているかどうかを調べることができます。その場合は0を返します。 – Florian

関連する問題