c++ - 具有 STL C++ 错误的强连接组件?

标签 c++ algorithm stl

我有一个包含有向图的文件。图顶点标记为从 1 到 N,N 接近 800.000(千)。我的硬币容器是:

vector<long> isExplored;
vector<long> f;
vector<vector<long>> matrix;
vector<vector<long>> matrixInverse;

我读取文件并设置 vector 的文件函数是( vector [0] 始终为零,即容器的大小为 n+1):

void InputClass::readFile() {
    ifstream inputFile;
    inputFile.open(fileName);
    string line;
    string word;
    int vertexNumber = 0;
    while(getline(inputFile, line)) {
        istringstream inputStream(line);
        inputStream >> word;
        if(vertexNumber != stoi(word)) {
            vertexNumber = stoi(word);
            matrix.resize(vertexNumber + 1);
        }
        while(inputStream >> word) {
            if(matrix[vertexNumber].size() == 0) {
                matrix[vertexNumber].push_back(0);
            }
            matrix[vertexNumber].push_back(stoi(word));
        }
    }
    long size = matrix.size();
    isExplored.resize(size);
    f.resize(size);
    for(unsigned long i = 0; i < matrix.size(); i++) {
        isExplored.push_back(false);
        f.push_back(0);
    }
    cout << "done";
}
My dfs algorithm is:

 void dfs(long vertex, InputClass kostas) {
     isExplored[vertex] = true;
     cout << "vertex: " << vertex;                                     //1
     for(unsigned long i = 1; i < kostas.matrix[vertex].size(); i++) {
        cout << " i: " << i << endl;
        if(!isExplored[kostas.matrix[vertex].at(i)]) {
            cout << "done1" << endl;
            dfs(kostas.matrix[vertex].at(i), kostas);
            cout << "done2" << endl;
        }
     }
     t++;
     f[vertex] = t;
 } 

最后是 dfs 循环:

void dfsLoop(InputClass kostas) {
    t = 0;
    for(unsigned long i = kostas.matrix.size() - 1; i >= 1; i--) {
        if(!isExplored[i]) {
            dfs(i, kostas);
            cout << "done" << " t " << endl;
    }
    //more code here
}

在一些(我认为是 5 次)dfs 递归调用之后,我的程序在 i = kostas.matrix.size() - 1 处崩溃。崩溃发生在 dfs 调用上,并且永远不会打印//1。我已经检查了 vector ,但它们初始化得很好。由于//1 从未打印过,我猜测崩溃发生在函数的变量 long vertex 或 InputClass kostas 上。 Kostas 应该没问题,我猜是长顶点导致了错误。有什么建议么?我还必须提到该算法在小/中输入时没有问题。

最佳答案

在我看来,您每次调用 dfs 时都在复制 InputClass。尝试通过将方法更改为 void dfs(long vertex, InputClass &kostas) 并将方法调用更改为 dfs(i, kostas);

来通过引用传递它

关于c++ - 具有 STL C++ 错误的强连接组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31865079/

相关文章:

algorithm - 是否可以找出这些字符串中使用了哪种哈希算法?

C++如何在不使用排序的情况下打印大小为n的数组中的最小数字

c++ - reinterpret_cast<> 和可移植性

c++ - 接受 char* 的模板化函数

c++ - 检查数组的邻居值

c++ - 如何使用 STL C++ 读取文件和保存连字符

c++ - 如何将 std::string 长度转换为十六进制然后再转换回字符串?

c++ - 在一行中创建指向值的指针

python - YIN算法到python寻找基频

c++ - vector::size() 如何在常数时间内返回 vector 的大小?