2013-03-27 4 views
5

問題: igraphを使用して.csvファイルに格納された隣接行列から重み付け無向グラフを作成し、最小スパニングツリーとその他のアルゴリズムを実行したい。C/C++の "igraph"で重み付けされた無向グラフを作成

まず、10個の頂点と5個のエッジを持つ有向グラフを作成しました。デフォルトでは、igraphはエッジのウェイトを許可していないため、ドキュメントには私には意味をなさない属性(igraph_i_set_attribute_tableなど)を使用する必要があります。

誰か助けてもらえますか?

void print_vector(igraph_vector_t *v, FILE *f) { 
    long int i; 
    for (i=0; i<igraph_vector_size(v); i++) { 
    fprintf(f, " %li", (long int) VECTOR(*v)[i]); 
    } 
    fprintf(f, "\n"); 
} 

int main(int argc, char* argv[]) 
{ 
    igraph_t g; 
    igraph_vector_t v; 
    int ret; 
    igraph_es_t es; 

    /* Initialize the vector for edges */ 
    igraph_vector_init(&v,10); 

    VECTOR(v)[0]=0;VECTOR(v)[1]=1; 
    VECTOR(v)[2]=1;VECTOR(v)[3]=3; 
    VECTOR(v)[4]=1;VECTOR(v)[5]=5; 
    VECTOR(v)[6]=2;VECTOR(v)[7]=3; 
    VECTOR(v)[8]=2;VECTOR(v)[9]=5; 

    igraph_create(&g,&v,0,IGRAPH_DIRECTED); 

    print_vector(&v,stdout); 

    /* igraph_i_set_attribute_table(&igraph_cattribute_table); */ 

    igraph_vector_destroy(&v); 
    igraph_destroy(&g); 

    return 0; 
} 

答えて

3

まず、RまたはPythonのigraphを使用する方がずっと優れています。属性ははるかに優れています。たとえば、属性値などに基づいて頂点や辺を簡単に選択することができます。Cでは、属性のサポートは最小限に抑えられています。ですから、本当にCが必要な場合を除いて、私はRやPythonの使用をお勧めします。

それでもCをしたい場合は、心に留めておくべき最初の事はあなたが明示的または暗黙的属性で何かをする前に、あなたのコード内で

igraph_i_set_attribute_table(&igraph_cattribute_table); 

を含める必要があるということです。つまり明示的に属性を操作するのではなく、いくつかの属性を持つ可能性のあるグラフを作成する場合でも、 GraphMLファイルを読み込む前にこの呼び出しが必要です。それ以外の場合は、属性が削除されます。 main()機能の冒頭にコールを含めることをお勧めします。

属性を使用する必要はありませんが、その意味がわかりません。

設定や属性を照会するためとして、examples/simpleディレクトリ内のファイルを参照してください。彼らは主にテスト目的のために使用されているので、

https://github.com/igraph/igraph/blob/master/examples/simple/cattributes.c https://github.com/igraph/igraph/blob/master/examples/simple/cattributes2.c https://github.com/igraph/igraph/blob/master/examples/simple/cattributes3.c https://github.com/igraph/igraph/blob/master/examples/simple/cattributes4.c

これらの例は、主に人工あり、しかし、彼らは基本的な使い方を示しています。

+0

非常に役に立ちました@Gabor。どうもありがとうございました。 – NightFox

関連する問題