【发布时间】: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的新手,所以如果我做错了什么,请告诉我
谢谢
【问题讨论】:
-
请提供minimal reproducible example。另请参阅:How to Ask.
-
您的问题是什么?在将变量用作数组索引之前进行一些范围检查通常是一个好主意。
-
我用的是kosaraju的算法drive.google.com/open?id=0B-iTBQCLcXUabHMxRmRGNmNzY1U就是一个例子
-
我使用 malloc 存储数字并检查 malloc 是否返回 null ,我的问题是这个函数给出了分段错误
-
我的完整程序在这里drive.google.com/open?id=0B-iTBQCLcXUaR3BFMVdoSmRzZ2M,我的这个程序的输入文件在这里:l.facebook.com/…
标签: c algorithm graph-algorithm