深さ優先探索について・・・
↓の文を参考にして、深さ優先探索のプログラムを書いてみました。
が、自分(初心者)ではできてるように思えたんですが、全然ダメみたいです。
再帰の使い方がよく分かってないというのもあるのですが(すみません)。
もしよろしければアドバイスを頂けませんか?お願いします!
『・始点(ここでは「1」)を出発して、番号が小さい順に進む位置を調べていき
行けるところ(辺でつながっていて、まだ未訪問の節点)まで進む。
・行き場所が無くなったら、行けるところがある節点まで戻っ(再帰をリターンし) て再び進めるだけ進む。
・行き場所がなくなったなら終了(再帰からリターン)
プログラムの際に節点iから節点jへ進めるか否かは節点と枝の関係を表すテーブル(これを隣接行列と言う)の要素a[i][j]の値が1であり、かつ訪問フラグv[j]が0であった時です。
訪問フラグは初期値に0を入れ(未訪問を表す)、
節点jが訪問されたならv[j]に1を入れます』
#include<stdio.h>
int recurse(int i,int j);
int main(void){
int recurse(int i,int j);
return 0;
}
int recurse(int i,int j){
int v[j];
int a[i][j];
v[j]=0;
v[0]=0;
a[i][j]={{0,1,1,0,0,0,0,0},
{1,0,0,1,0,0,0,0},
{1,0,0,1,0,0,0,0},
{0,1,1,0,1,0,0,0},
{0,0,0,1,0,1,0,1},
{0,0,0,0,1,0,1,0},
{0,0,0,0,0,1,0,1},
{0,0,0,0,1,0,1,0}};
for(i=0;i<8;i++){
for(j=0;j<8;j++){
if(a[i][j] == 1 && v[j] == 0){
v[j]=1;
printf("%d->%d ",i,j);
break; }
else return 0;
}
}
return 0;
}
お礼
すいません説明不足でしたm(_ _)m 全部調べて見つからなかった場合のみは0を返すようにしたいんです。 それで、見つかった場合は1を返してすぐにfind自体を抜け出したいってわけなんです。goto文は極力使いたくないので避けたいのですが・・ なぜ 関数自体を丸ごとかえてしまってもかまいません。何かいい方法はないでしょうか
補足
↓の「なぜ」 は無いことに