igraph(c_lib):如何获取事件边缘

时间:2014-11-17 15:09:09

标签: igraph

我正在尝试实现从图g中检索相邻边集的代码。 igraph_es_incident和igraph_es_adj方法似乎是合适的,但它们在文档中链接到的示例似乎不起作用。

第一个问题是示例代码不使用有问题的方法(_incident)而是使用_adj方法。第二个问题是示例方法与实现和文档不同。

示例代码(4个输入):

igraph_es_adj(&g, &it, i, IGRAPH_OUT);

文档和实际实施(3个输入):

int igraph_es_adj(igraph_es_t*, igraph_integer_t, igraph_neimode_t)

所以,我的问题是我如何正确使用_incident或_adj方法来获取图形g?

谢谢

PS。有关_incident的文档:http://igraph.org/c/doc/igraph-docs.pdf第211页。示例代码:https://github.com/igraph/igraph/blob/master/examples/simple/igraph_es_adj.c第71行。

2 个答案:

答案 0 :(得分:0)

我在http://igraph.org/c/doc/igraph-docs.pdf的第208页找到了答案。这里他们展示了如何使用索引器进行视频。

答案 1 :(得分:0)

此代码已成功检索vid的邻居(j是您可能寻找的边缘ID):

igraph_integer_t vid = 0; // vertex vid in question
    igraph_es_t es; // edge selector
    igraph_eit_t it; // iterator
    igraph_integer_t size; // to check the degree
    igraph_es_incident(&es, vid, IGRAPH_ALL); // select edges from and to vid
    igraph_es_size(&g, &es, &size); // how many edges? 
    printf("%d neighbors of %d \n",size,vid); 
    igraph_eit_create(&g, es, &it); // create iterator
    IGRAPH_EIT_RESET(it);  // and iterate
    while(!IGRAPH_EIT_END(it)){ 
      igraph_integer_t j = IGRAPH_EIT_GET(it);
      IGRAPH_EIT_NEXT(it);
      printf("%d is neighbor of %d \n",IGRAPH_OTHER(&g,j,vid),vid); 
    }