连接组件BOOST c ++

时间:2014-11-18 18:28:52

标签: c++ boost connected-components

如果我有一个节点没有边缘的图形。连接组件的数量= 1,对吗?

如果我有一个包含2个节点但没有边缘的图形。连接组件的数量= 2,对吧?

如果我有一个包含2个节点和1个边的图。连接组件的数量= 1,对吗?

我有这个代码:

typedef adjacency_list <vecS, vecS, undirectedS> Graph;
    typedef graph_traits < Graph >::edge_descriptor Edge;

   /* typedef graph_traits<Graph>::vertex_descriptor Vertex;
    typedef property_map<Graph, vertex_index_t>::type IndexMap;

    typedef std::pair<int,int> E;
    typedef graph_traits<Graph>::vertex_iterator vertex_iter;
    typedef graph_traits<Graph>::out_edge_iterator edge_iter;
    typedef property_map<Graph, vertex_index_t>::type VertexIndexMap;
    typedef property_map<Graph, edge_weight_t>::type EdgeWeightMap;*/


  int main(int,char*[])
  {

   int num_nodes,num_edges;
   cin >> num_nodes >> num_edges;

   Graph g(num_nodes);

    for(int i = 0;i < num_edges; i++) // i/p edges into graph g
    {

        int e1,e2;
        cin >> e1 >> e2;

        Edge e;
        bool success;


        tie(e,success) = add_edge(e1, e2, g);
    }

    vector <int> components(num_nodes);
    int num = connected_components(g, &components[0]);




        cout<<"moooooo"<<num<<endl;

对于这些输入:

1 0

2 0

2 1

我分别得到了

1

2

2

为什么呢? shoudn现在是1?我误解了连接组件吗?

我的程序为所有输入提供num = 2,我的输入如下:

4 3
1 2
2 3
3 4

4 4
1 2
2 3
3 4
4 1

5 5
1 2
2 3
3 4
4 1
3 5

6 6
1 2
2 3
3 4
4 1
3 5
5 6

8 9
1 2
2 3
3 4
4 1
3 5
5 6
6 7
7 8
8 5

8 10
1 2
2 3
3 4
4 1
3 5
5 6
6 7
7 8
8 5
4 6

我做了什么shpudl?

1 个答案:

答案 0 :(得分:2)

  

连接组件是图形的子图或图形本身   到达每个其他节点的所有节点。最小数量   连通分量= 0,而最大值是节点数   图表。

这里的问题是我使用从1开始的节点....并且boost认为节点从0开始,因此我总是比正常情况更多地连接1个组件。

技巧 ::  是使用 vertice_num_ -1 而不是顶点编号本身。