Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在BGL中进行有限深度搜索时,是否使用了内存或时间?_C++_Boost Graph - Fatal编程技术网

C++ 在BGL中进行有限深度搜索时,是否使用了内存或时间?

C++ 在BGL中进行有限深度搜索时,是否使用了内存或时间?,c++,boost-graph,C++,Boost Graph,是否可以在不访问、过滤、索引等情况下,对BGL中的顶点进行深度或广度优先搜索/访问,而不访问、过滤、索引等图形中的所有顶点 我写的最接近的东西是(创建图012345,但只访问顶点0到3): #包括 #包括 #包括 使用名称空间std; 结构自定义\u dfs\u访问者:公共boost::默认\u dfs\u访问者{ 模板 void discover_顶点(常数顶点&v、常数图&g)常数{ std::cout图; 图g(6); boost::添加_边(0,1,g); boost::添加_边(1,2

是否可以在不访问、过滤、索引等情况下,对BGL中的顶点进行深度或广度优先搜索/访问,而不访问、过滤、索引等图形中的所有顶点

我写的最接近的东西是(创建图012345,但只访问顶点0到3):

#包括
#包括
#包括
使用名称空间std;
结构自定义\u dfs\u访问者:公共boost::默认\u dfs\u访问者{
模板
void discover_顶点(常数顶点&v、常数图&g)常数{
std::cout图;
图g(6);
boost::添加_边(0,1,g);
boost::添加_边(1,2,g);
boost::添加_边(2,3,g);
boost::添加_边(3,4,g);
boost::添加_边(4,5,g);
std::vector color_映射(boost::num_顶点(g));
boost::深度优先访问(
G
顶点(0,g),
自定义\u dfs\u访问者(),
boost::生成迭代器属性映射(
颜色映射。开始(),
boost::get(boost::顶点索引,g),
颜色映射[0]
),
终止符()
);
返回0;
}
它只打印0 1 2 3而不是访问所有顶点,但代码仍然需要与整个图形一样大的颜色贴图(boost::num_顶点(g))。有没有办法使搜索复杂度与图形中的边/顶点总数完全不可比

使用捆绑颜色是可以接受的,因为许多搜索将在图形的不同部分进行,但是否有可能从O(顶点的数量)降低同一图形中每个单独搜索的复杂性? 当终结者返回真值时,顶点的初始着色也有望停止,但这似乎已经得到了解决。 可能有一个相关的问题:如果图形使用的不是VEC,那么索引如何?在这种情况下,BFS/DFS可以不使用索引吗?
感谢您的帮助。

事实证明,使用捆绑属性是实现这一点的最简单方法。每个顶点都包含颜色属性这一事实比每次完成dfs时为每个顶点创建颜色属性要好。图形类型应为

typedef boost::adjacency_list<
    boost::vecS,
    boost::vecS,
    boost::undirectedS,
    property<vertex_color_t, boost::default_color_type>
> Graph_T;
如上所述,在具有100 M顶点的图中执行有限的dfs不会增加内存消耗(占总内存的76.2%),而在具有外部颜色向量的图中,搜索时内存使用率从76.2%增加到78.5%

typedef boost::adjacency_list<
    boost::vecS,
    boost::vecS,
    boost::undirectedS,
    property<vertex_color_t, boost::default_color_type>
> Graph_T;
depth_first_visit(
    g,
    vertex(0, g),
    custom_dfs_visitor(),
    get(vertex_color_t(), g),
    Terminator()
);