[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 08/07 07:50 / Filesize : 147 KB / Number-of Response : 453
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C/C++の宿題を片付けます 105代目



9 名前:デフォルトの名無しさん [2008/04/16(水) 07:43:14 ]
nodeinfo_t infoary[NODENUM]の説明
ノードのラベルと親ノードを、ノード-1の位置に記憶する
ex. ノード3のラベルと親ノードは、infoary[2].label, infoary[2].parent
infoary[x-1].label == 0 の場合、xは通過していないことになる

analyze_depth:
@空のスタック(stack_t stack={0})、初期化されたノード情報配列(nodeinfo_t infoary[NODENUM] = {{0}})を宣言
Aスタックにルートノード(start)をプッシュ : pushstack(&stack, start);
Bルートノードを通過済みする : flags[start-1] = 1;
Cルートノードのラベルを1に設定 : infoary[start-1].label = 1;
  ルートノードの親ノードを自分に設定 : infoary[start-1].parent = start;
Dラベルを2に設定 : label = 2;
Eスタックにデータ(親ノード)がある→F、 スタックが空→N
 Fスタックからノードを取り出す(親ノード) : parent = popstack(&stack);
 G親ノードから到達可能なノード(子ノード)が、ある→H、ない→E : for(i=0; adj[parent-1][i] != 0; ++i){
  H子ノードが未通過→I、通過済み→G : if( flags[ adj[parent-1][i]-1 ] == 0){
   I子ノードを通過済みにする : flags[ adj[parent-1][i]-1 ] = 1;
   Iスタックに親ノードをプッシュ : pushstack(&stack, parent);
   Jスタックに子ノードをプッシュ : pushstack(&stack, adj[parent-1][i]);
   K子ノードのラベルを設定 : infoary[ adj[parent-1][i]-1 ].label = label;
    子ノードの親ノードを設定 : infoary[ adj[parent-1][i]-1 ].parent = parent;
   Lラベルを+1する : ++label;
   MEに戻る : break;
Nラベルが0以外のノードを表示する
printf(" v_label parent\n");
for(i=0; i < NODENUM; ++i){
if(infoary[i].label != 0){
printf("%2d : %7d %6d\n", i+1, infoary[i].label, infoary[i].parent);
}
}
上記間違いがあっても、当方は責任を負いかねます
これで分からないなら、まずwikiで深さ優先探索、スタックをじっくり勉強してください






[ 続きを読む ] / [ 携帯版 ]

全部読む 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<147KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef