打印矢量图矢量的弱分量

时间:2016-03-22 20:19:56

标签: c++

我正在编写一个必须使用图形的C ++程序。我对其中一种方法有一个小问题。所以,我的结构看起来像

struct graph {  
    std::vector <std::vector<int>> gr;
};

我有一个方法必须返回起源于顶点的弱组件内的顶点,并且只能使用现有顶点调用它。

所以这是:

std::vector<int> weak_component(const graph& g, int vertex) {
    std::vector<int> ret;   
    if (vertex >= 0 && vertex < g.gr.size()) {
        for (std::vector<std::vector<int>>::size_type i = 0; 
             i < g.gr[vertex].size(); i++) {
            for (std::vector<int>::size_type j = 0; j < g.gr[i].size(); j++) {
                std::fill(ret.begin(), ret.begin(), g.gr[i][j]);
                std::cout << vertex; 
            }
        }   
    }
    return ret; 
}

我正在尝试填充另一个向量并将其返回。 例如:如果我用数据填充测试图

 0, 1
 1, 2
 1, 3

调用方法weak_component(g, 0)返回值应为0, 1, 2, 3。 在我的方法中我做错了什么? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

改变这个:

    for (std::vector<std::vector<int>>::size_type i = 0; 
         i < g.gr[vertex].size(); i++) {
        for (std::vector<int>::size_type j = 0; j < g.gr[i].size(); j++) {
            std::fill(ret.begin(), ret.begin(), g.gr[i][j]);
            std::cout << vertex; 
        }
    }   

为:

    for (int adj : g.gr[vertex]) {
        for (int elem : g.gr[adj]) {
            ret.push_back(elem);
            std::cout << vertex; 
        }
    }   

除非必须,否则不要使用索引。迭代范围。

你的fill什么也没做。将其替换为push_back以将内容添加到返回值。

我也很想添加sortunique - erase来清理它。