打印图中矢量的弱分量

Print weak component of a graph vector of vectors

本文关键字:分量 打印      更新时间:2023-10-16

我正在编写一个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。我的方法做错了什么?谢谢你的帮助。

更改此项:

    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来清理它。