【问题标题】:Computing Strongly connected components using c programming language [closed]使用 c 编程语言计算强连接组件 [关闭]
【发布时间】:2017-05-30 07:48:19
【问题描述】:

对这段代码感到困惑 所以这是我认为是错误的两个功能

void dfsloop1(int **g)
{
    int i;
    int temp=0;
    for(i=0;i<875714;i++)
    {
        temp = f[i];
        x[temp-1] = i;
    }
    for(i=875714;i>0;i--)
    {
        if(!explored[x[i-1]])
        {
            s = i-1;
            dfs1(g,x[i-1]);
        }
    }
}

void dfs1(int **g,int i)
{

    explored[i] = 1;
    leader[i] = s;
    int j;
    for(j=0;j<a[i];j++)
    {
        if(!explored[(g[i][j]-1)])
        {
            dfs1(g,g[i][j]);
        }
    }
}

这里探索的数组记录节点/顶点是否被检查,如果被检查,那么说第 i 个顶点被检查then explored[i-1] = 1 else explored[i-1] = 0,a[i] 存储到多少个顶点i+1 第一个顶点被连接 例如顶点 1 与 2,4,5 连接,然后a[0] 将是 3,图形在邻接列表中传递,我已经在反向图上运行 dfs 并将该神奇编号存储在 f[i] 使用 kosaraju 的算法,现在我正在尝试在我的原始图 g 上运行 dfs 在 x[i] 我按递增顺序存储 f[i] 例如让我们说在 9 个顶点图 f[0] = 7,f[1] = 3,f[2] = 1,f[4] = 2,f[5] = 5,f[6] = 9,f[7]=4,f[8] = 6 then x[0] = 2(这是最小的索引 f[i]),x[1] = 4,x[2] = 1 等等。

如果我留下了什么或不清楚的地方,请告诉我。 谢谢

顶点总数为 875714

我是stackoverflow的新手,所以如果我做错了什么,请告诉我

谢谢

【问题讨论】:

标签: c algorithm graph-algorithm


【解决方案1】:

我查看了您的代码。我假设您是新手,因为您的主要功能混杂着实际上并不方便的代码。
两件事:
1.您正在处理指针以及指针的指针。
2. 您为局部变量/指针消耗了超过 10^5 的整数内存。

我对指针了解不多。然而,作为一名参赛者,我曾经在本地声明大型数组时遇到“运行时错误”。所以,我认为你的问题在于这两个部分。尝试全局声明指针的指针。看看有没有帮助。

我给你一个 SCC 算法的链接。
e-maxx:https://e-maxx-eng.appspot.com/graph/strongly-connected-components.html

和我的 scc 实现:
https://bitbucket.org/techboy_zero/programming-and-software-development/src/035560584ce7ab7e0a3f6ab5ae1406095bd39b62/Programming%20Contest%20Algorithms/Graph%20Theory/Strongly_Connected_Component.cpp

不过,我的是 c++。只需查看 dfs 和 kosaraju 函数即可。如果您在理解关键字方面有任何问题,请在 cplusplus.com 中搜索。如果不了解机制,请随时问我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    相关资源
    最近更新 更多