pdfファイルを参照いただけると多少イメージがわくかと思います。
http://www.geocities.jp/yukitsun001/question.pdf
投入画面において、投入するのは「〓」という記号と「‖」という
記号です。
出したいアウトプットにおいて、自動的に算出したいのは各数値です。
◎は駅、「〓」と「‖」は駅と駅を結ぶ線路と考えて下さい。
今、駅が25個あります。
そして任意に線路を引きます。線路を設けられる区間はこの場合40区間ですね。
各◎からオレンジのセルの◎まで各1回列車が走ります。
つまり、各区間に何回列車が通過したかというのを算出するマクロ(VBA)を作りたい
のです。具体的でなくてもロジックだけでもアイデアお待ちします。
線路の配置に仕方によっては、まったくオレンジのセルの◎まで行けず、各区間0回
になることもあるでしょう。
また、最短ルートが2ルート以上できてしまうこともあるでしょう(これはいずれの
ルートをとるか法則を決めなければ・・・)
よろしくお願い致します。
http://www.geocities.co.jp/SiliconValley-Oakland/1680/puzzle/puz...
M.Hiroi's Home Page / Puzzle De Programming
アルゴリズムとしては、バックトラックを使用する性質の問題なのではないでしょうか?
迷路の解法と同じだと思います。
http://moe.livedoor.biz/archives/573666.html
レビログ・ブレスト置き場:線路の問題 - livedoor Blog(ブログ)
初めてなので、うまく投稿できたかな・・・?
ぜんぜん、ちがってたらすみません。
とくにVBAなどのマクロを使わずに
セル計算のみで作りました。=の判定のためにIF関数は使ってます。でもこれは関数なのでVBAじゃないですよね?
というわけで セル計算のみです。
ただし、経路がつながっているかどうかは判定していないので、つながってない経路分も表示はしてしまいます。(数値は影響しませんが)
また、オレンジを動かすこともできません。
ロジックなどは↑のページに書いておきました。
うぅ、初めてなので、とんちんかんな回答だったらすみません。
http://www.hatena.ne.jp/1084162275
Excelに詳しい方、お力いただければ幸いです。 pdfファイルを参照いただけると多少イメージがわくかと思います。 http://www.geocities.jp/yukitsun001/question.pdf 投入.. - 人力検索はてな
URLダミーです。
1) オレンジの駅から始めて、
2) 上のセルに線路があるか見る。
ある>1駅進んで、着いた駅にフラグを立てる。通った線路にカウント+1。
ない>何もせず。
3) 2)を右下左ともに繰り返す。以上で距離1駅の場合が終了。
4) 同様に距離2駅の駅を探し、フラグを立て、通った線路にそれぞれカウント+1。
5) 距離を増やしながら繰り返し、フラグの立って無い駅が見つからなければ終了。
既にフラグの立った駅に着いた場合は何もしないこと。(短い他ルートがあるか、同距離で既に他のルートでカウントされたとみなされる)
思わず考えてしまったので、いちおう回答してみます。マクロはマニュアル見ながらでないと組めないので、マクロで実現できるか?とか、不備があるとか、もっと手っ取り早い方法があるとか、十分に考えられますが…。
http://www.geocities.jp/yukitsun001/
イトウチエミの英文法メールマガジン
簡単なアイディアだけです。
事前準備
1.目的地=オレンジが一つだけかどうかのチェック。
2.孤立している(目的地につながっていない)〓‖がないかどうかのチェック。
3.最短経路を出すロジック。
これをどうするのかで論理がだいぶ変わってくるのでは。
縦優先か横優先か決めていいのなら、という前提で。
縦優先 ->縦、横どちらからもいける場合、〓を消す。
4.探索ループ用セルの初期化
探索ループ
どこかに計算用のセルを準備する。
◎ のセルにはその◎につながっている〓‖の数
〓‖のセルには、〓‖そのものか、もしくはカウンタ
1.◎部分(座標軸によって全部検索)につながっている〓‖の数を埋める(上書)。
2.◎部分が1のセルだけ、その隣接する〓‖を、自分の4辺に隣接する数字を全部足し併せて、1を加えた数字にする
3.◎部分が1のセルの数字を0にする
4.◎部分が1以上のセルがなくなればループ終了処理
もう一度、1へ。
最後に残った ブランクの〓‖のセルに0を埋めていく。
ありがとう。参考にできます。
ひとつ余談なのですが、実は各駅からオレンジセルまで
列車が走った距離(区関数)が算出できてもよいです。
こちらの方が簡単かなぁ。
どうぞよろしくお願い致します!!
なるほど!!
まずはロジック(考え方)でいいです。かなり参考になりました。
今理解に努めています。