为我的图形数据结构实现BFS的问题

时间:2011-08-09 19:02:24

标签: c++ algorithm

这是我从头开发的图形数据结构的设计。现在实施BFS我想用STL的某些部分来增加负担。 Here is

我正在使用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)

对不起,我的问题可能看起来含糊不清,但无法解释得比这更好。

3 个答案:

答案 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和我建议的那些)。