2013-03-27 47 views
5

問題: 我想用的igraph使從存儲在.csv文件鄰接矩陣加權無向圖,然後做最小生成樹和它的一些其他算法。在「IGRAPH」創建一個加權無向圖中的C/C++

我開始製作一個有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); 

在你的代碼,你做任何事情之前,屬性明確或含蓄。 IE瀏覽器。即使您不明確操作屬性,但創建了可能具有某些屬性的圖,例如。讀一個圖形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 2013-03-28 06:37:38