这是我从头开发的图形数据结构的设计。现在实施BFS我想用STL的某些部分来增加负担。
我正在使用Cormen的书中的算法。对于某些算法,例如
颜色[u],距离[u]等,我想用地图。但我无法决定是否
我应该使用像&gt;&gt;这样的地图std::map<node<T>*, Node_struct_data_like_color_etc>
或
std::map<data_type_which_node_contains, Node_struct_data_like_color_etc>
此外,上图必须与算法的其他部分相符
for(all_adjacent_vertex_v_of_u)
等
对不起,我的问题可能看起来含糊不清,但无法解释得比这更好。
答案 0 :(得分:1)
如果有帮助,我会写这个简单的bfs
//simple bfs assuming graph is of the form vecotr<int> g
int q[20000];
int vis[20000];
void bfs( int v_ )
{
int top = 0;
memset(vis, 0, sizeof(vis));
vis[v_] = 1;
q[top++]=v_;
while( top )
{
int v = q[--top];
for( vector<int>::iterator it = g[v].begin(); it!= g[v].end(); ++it )
{
int u = *it;
if( !vis[u] )
{
q[top++]=u;
vis[u] = 1;
}
}
}
}
答案 1 :(得分:0)
一旦我试图做类似的事情。我做的错误是我没有定义
当我将指针存储到节点作为索引类型时,函数对象对map
的元素进行排序。因此,在设计BFS时,在将颜色/其他属性保持为地图中的value_type并将节点指针作为索引类型时,应考虑这一点。
所以您计划实施的地图应该看起来像这样
std::map<Node_t*,NodeProperty_t*,SortNode>
struct SortNode{
operator()(Node_t*,Node_t*){
//...
}
}
答案 2 :(得分:0)
您可能需要查看Boost Graph Library的灵感,甚至只是使用它。
请注意,它支持属性映射(如您建议的第一个映射)和自定义节点类(@Grigory Javadyan和我建议的那些)。