- ベストアンサー
階層図作成処理について
お世話になります。 タイトル通り、階層図作成処理を作ろうとして 行き詰っています。 1階層 2階層 ○┬○ ○┬○┬○ ├○ │ ├○ └○ │ └○ ├○┬○ │ ├○ │ └○ └○┬○ ├○ └○ という感じで、階層毎に3つに分岐させようと しています。 階層が可変になっており、できれば階層数を 関数の引数として渡せば、上記の様な図が できればいいと思っているのですが、 どの様な処理を書けばいいでしょうか? #多次元ループですかね?やはり・・・・ ヒントなりともいただけるとありがたいと思います。 また、上記階層図よりも、こっちの方が見やすいなどの 方法がありましたら教えていただきたいと思います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
あんまり綺麗ではないが以下のようなものかな。 #! /usr/bin/perl push @str, "○"; push @str, "○"; push @str, "○"; printf("○┬"); push @sp, " "; ppp(1); sub ppp { my ($lvl) = @_; my ($i); $lvl--; for($i = 0; $i <= $#str; $i++){ if($lvl > 0){ if($i == $#str){ printf("%s└○┬",join('',@sp)); push @sp, " "; } elsif($i == 0) { printf("○┬"); push @sp, "│ "; } else { printf("%s├○┬",join('',@sp)); push @sp, "│ "; } ppp($lvl); pop @sp; } else { if($i == 0){ printf("$str[$i]\n"); } elsif($i == $#str){ push @sp, "└"; printf("%s$str[$i]\n", join('',@sp)); pop @sp; } else { push @sp, "├"; printf("%s$str[$i]\n", join('',@sp)); pop @sp; } } } }
その他の回答 (1)
- steel_gray
- ベストアンサー率66% (1052/1578)
多次元ループというより「再帰」なのかな・・・ 具体的に何の階層図なのかとか使用方法とかがあると読む側がイメージし易くなるかも。 趣旨を理解できていませんがJavascriptのちょっとした(?)サンプルを書いてみました。明らかに描画される図は違いますが参考になれば。 (数値を変え、描画ボタンを押して動作させてみてください。あまり大きな数値を入れるとブラウザが固まるかもしれませんので1-4ぐらいで。) <html> <head> <title>再帰でリストを描く</title> <script type="text/javascript"> <!-- var DepthCounter; function show_tree(depth) { oTOP = document.getElementById('tree'); if(oTOP.firstChild)oTOP.removeChild(oTOP.firstChild) makelist(oTOP,'',depth); } function makelist(oOwner,str,depth) { depth--; var oUL = document.createElement('UL'); for(var i=0;i<3;i++) { var oLI = document.createElement('LI'); var Text = str + '-' + (i+1); var tNode = document.createTextNode(Text); oLI.appendChild(tNode); if(depth) makelist(oLI,Text,depth); oUL.appendChild(oLI); } oOwner.appendChild(oUL); } //--> </script> </head> <body> <p>階層数<input type="text" size="3" value="2" id="depth"> <input type="button" value="描画" onclick="show_tree(document.getElementById('depth').value)"></p> <div id="tree"></div> </body> </html>
補足
ありがとうございます。 確かにイメージが掴みにくいですね・・・ 簡単に言うと 1.ある物に対して数種類の行動を起こす事ができる。 2.その行動は最大10回まで行う事ができる。 3.その行動によって、成功、失敗、破壊という結果になる。 4.行動の種類によってそれぞれの確率が異なる という動きが基本としてあります。 これをふまえて、あるユーザーがそれぞれの行動によって 起こる結果の確率、例えば全て成功する確率とか、 1回目失敗した後、全部成功する確率などを一覧で 表示したいのです。 #破壊された場合、次の行動が起こせなくなるのですが #そのあたりを考えると余計にわかりにくいかと、今回は #そのまま続けられるという事で書いていました。 流れを考えると、階層図がふさわしいのかなと思い、 階層図の描画処理という事で書かせていただきましたが 実際は階層図でなくても問題はありません。 教えていただいた方法は、参考にさせていただきます。 ありがとうございました。
お礼
こんにちわ。 お~、すごいですね(^^ 思い通りの動きをしています。 やはり複雑な処理にせざるを得ないのですね・・・ あとは、この処理を利用させてもらって 確率を表示させる事ができる様にしたいと思います。 ありがとうございました。(^^