This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center。
我必须用C语言创建一个编程代码,用深度优先搜索来计算五个最大的强连接组件的大小。
我用ubuntu 12.04编程。我想出了下面的代码,它在终端中显示的结果是:Segmentation Fault (core dumped)
这是当我尝试在函数调用中放入graph[MaxVer][MaxVer][2]
时发生的事情。
代码
#include "stdio.h"
#include "stdlib.h"
#define MaxVer 875714
long int t=0;
long int visited[MaxVer][2]={0};
long int s=NULL;
long int leader[MaxVer];
long int time[MaxVer];
int count;
main()
{
long int i,j,k;
long int Graph[MaxVer][MaxVer][2]={0};
FILE *fp;
fp=fopen("SCC.txt","r");
fscanf(fp,"%ld",&j);
for(i=1;i<=875714;i++)
while(i==j)
{
fscanf(fp,"%ld",&k);
Graph[i-1][k-1][0]=1;
fscanf(fp,"%ld",&j);
}
fclose(fp);
DFS_loop(Graph,0);
for(i=0;i<MaxVer;i++)
for(j=0;j<MaxVer;j++)
if(Graph[(time[i])][(time[j])][0]=1)
Graph[i][j][1]=1;
DFS_loop(Graph,1);
}
DFS_loop(long int graph[][][],long int i)
{
long int node;
for(node=MaxVer;node>0;node--)
if(!visited[node-1][i])
{
s=node;
DFS(graph,i,node);
if(i==1&&count<5)
printf("%ld",t);
}
}
DFS (long int graph[][][],long int i,long int node)
{
long int node_2;
visited[node-1][i]=1;
leader[node-1]=s;
for(node_2=1;node_2<=MaxVer;node_2++)
if(graph[node_2-1][node-1][i]==1)
if(!visited[node_2-1][i])
{
DFS(graph,i,node_2);
if(i==1&&count<5)
{
t++;
count++;
}
}
if(i==0)
{
t++;
time[t-1]=node;
}
}
结束
有人能告诉我代码中有什么问题吗?
编译时的主要问题发生在调用DFS和DFS\u循环期间上面说“数组类型有不完整的元素类型”。
是的,我想告诉你,输入是在一个文件中给出的,有875714个顶点。
输入的示例是274657,其中2是尾部,74657是定向边的头部。
另外,如果有人能提出更好的方案,请提供。
最佳答案
在main()
之前制作适当的功能原型,并指定第2和第3维度的大小(使用graph[MaxVer][MaxVer][]
而不是graph[][][]
)
07-28 02:48