深さ優先検索を使用して 5 つの最大の強結合コンポーネントのサイズの数をカウントするためのプログラミング コードを 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_loop の呼び出し中に発生します。「配列型には不完全な要素型があります」とあります。はい、入力は 875714 個の頂点を持つファイルで与えられることをお伝えしたいと思います。入力の例は 2 74657 です。2 はテールで、74657 は有向エッジの先頭です。
また、誰かがより良いプログラムを提案できる場合は、それを提供してください.