を使用ので、これらは私がバギーコンピュ強連結成分Cプログラミング言語にコード このsemgentに混乱
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]
は、いくつの頂点に格納されますか頂点が接続されています。 たとえば、頂点No.1は2,4,5に接続され、a[0]
は3になり、グラフは隣接リストに渡され、私は既に逆のグラフ上でdfsを実行し、その魔法の番号をf [i]に保存しました kosarajuのアルゴリズムを使用して、元のグラフに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
等々。
もし私が何かを残したり、何かが不明な場合は私に知らせてください。頂点の おかげ
総数は、私は私はあなたのコードを見
おかげ
[mcve]を入力してください。また参照:[ask]。 –
あなたの質問は何ですか?配列インデックスとして変数を使用する前に、ある範囲チェックを行うのが一般的には良い考えです。 – imqqmi
私はkosarajuのアルゴリズムを使用しています。https://drive.google.com/open?id=0B-iTBQCLcXUabHMxRmRGNmNzY1Uは例です – help