bgs*_*ler 6 c++ boost boost-graph
我正在尝试使用boost图库,当我尝试使用boost :: edge()时,我遇到了段错误.完整的代码可以在这里找到,但是我在这里制作了一个具有相同问题的最小程序(我用"g ++ minimal.cpp"编译):
#include<stdio.h>
#include<boost/graph/adjacency_list.hpp>
using namespace boost;
using namespace std;
typedef adjacency_list<> graph_t;
typedef graph_traits<graph_t>::edge_descriptor edge_descriptor;
int main(){
graph_t G;
//add_edge(1,3,G);
//remove_edge(1,3,G);
pair<edge_descriptor, bool> res = edge(1,3,G);
printf("G does %shave an edge 1->3\n", res.second ? "" : "not ");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我取消注释add_edge,remove_edge行,则不会发生段错误,程序会打印出预期的
G does not have an edge 1->3
Run Code Online (Sandbox Code Playgroud)
但有没有办法避免这样的hackery?谢谢!
显然,add_edge(1,3,G)
如果需要,该调用会向图中添加顶点。您的第一个电话就是在这种情况下。然后它将从顶点 1 到顶点 3 的边相加。请注意,在此调用之后,顶点数为 4,因为顶点索引从 0 到 3。
随后的调用将remove_edge(1,3,G)
删除刚刚添加的边,但保持顶点数不变。
edge(1,3,G)
另一方面,调用不会向图中添加任何顶点,返回中的布尔值用于说明顶点 1 和 3 是否连接。如果删除 则存在访问冲突,add_edge
因为索引 1 和 3 处的顶点不存在。
您可以简单地使用所需数量的顶点来初始化图形:
graph_t G(4);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
527 次 |
最近记录: |