5

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

まず、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;
}
4

1 に答える 1

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

これらの例は、主にテスト目的で使用されるため、主に人工的なものですが、基本的な使用法を示しています。

于 2013-03-27T11:30:03.510 に答える