人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelに詳しい方、お力いただければ幸いです。

pdfファイルを参照いただけると多少イメージがわくかと思います。
http://www.geocities.jp/yukitsun001/question.pdf

投入画面において、投入するのは「〓」という記号と「‖」という
記号です。
出したいアウトプットにおいて、自動的に算出したいのは各数値です。

◎は駅、「〓」と「‖」は駅と駅を結ぶ線路と考えて下さい。
今、駅が25個あります。
そして任意に線路を引きます。線路を設けられる区間はこの場合40区間ですね。

各◎からオレンジのセルの◎まで各1回列車が走ります。
つまり、各区間に何回列車が通過したかというのを算出するマクロ(VBA)を作りたい
のです。具体的でなくてもロジックだけでもアイデアお待ちします。

線路の配置に仕方によっては、まったくオレンジのセルの◎まで行けず、各区間0回
になることもあるでしょう。
また、最短ルートが2ルート以上できてしまうこともあるでしょう(これはいずれの
ルートをとるか法則を決めなければ・・・)

よろしくお願い致します。

●質問者: yoshifuku
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:Excel PDFファイル VBA アイデア アウトプット
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● itochan???
●10ポイント

http://www.geocities.co.jp/SiliconValley-Oakland/1680/puzzle/puz...

M.Hiroi's Home Page / Puzzle De Programming

アルゴリズムとしては、バックトラックを使用する性質の問題なのではないでしょうか?

迷路の解法と同じだと思います。

http://www.inet-lab.org/ted/program/prog065.html#065.3


2 ● lemkun
●10ポイント

http://moe.livedoor.biz/archives/573666.html

レビログ・ブレスト置き場:線路の問題 - livedoor Blog(ブログ)

初めてなので、うまく投稿できたかな・・・?

ぜんぜん、ちがってたらすみません。

とくにVBAなどのマクロを使わずに

セル計算のみで作りました。=の判定のためにIF関数は使ってます。でもこれは関数なのでVBAじゃないですよね?

というわけで セル計算のみです。

ただし、経路がつながっているかどうかは判定していないので、つながってない経路分も表示はしてしまいます。(数値は影響しませんが)

また、オレンジを動かすこともできません。

ロジックなどは↑のページに書いておきました。

うぅ、初めてなので、とんちんかんな回答だったらすみません。


3 ● objectm
●25ポイント

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) 距離を増やしながら繰り返し、フラグの立って無い駅が見つからなければ終了。

既にフラグの立った駅に着いた場合は何もしないこと。(短い他ルートがあるか、同距離で既に他のルートでカウントされたとみなされる)

思わず考えてしまったので、いちおう回答してみます。マクロはマニュアル見ながらでないと組めないので、マクロで実現できるか?とか、不備があるとか、もっと手っ取り早い方法があるとか、十分に考えられますが…。

◎質問者からの返答

なるほど!!

まずはロジック(考え方)でいいです。かなり参考になりました。

今理解に努めています。


4 ● nankichi
●25ポイント

http://www.geocities.jp/yukitsun001/

イトウチエミの英文法メールマガジン

簡単なアイディアだけです。

事前準備

1.目的地=オレンジが一つだけかどうかのチェック。

2.孤立している(目的地につながっていない)〓‖がないかどうかのチェック。

3.最短経路を出すロジック。

これをどうするのかで論理がだいぶ変わってくるのでは。

縦優先か横優先か決めていいのなら、という前提で。

縦優先 ->縦、横どちらからもいける場合、〓を消す。

4.探索ループ用セルの初期化

探索ループ

どこかに計算用のセルを準備する。

◎ のセルにはその◎につながっている〓‖の数

〓‖のセルには、〓‖そのものか、もしくはカウンタ

1.◎部分(座標軸によって全部検索)につながっている〓‖の数を埋める(上書)。

2.◎部分が1のセルだけ、その隣接する〓‖を、自分の4辺に隣接する数字を全部足し併せて、1を加えた数字にする

3.◎部分が1のセルの数字を0にする

4.◎部分が1以上のセルがなくなればループ終了処理

もう一度、1へ。

最後に残った ブランクの〓‖のセルに0を埋めていく。

◎質問者からの返答

ありがとう。参考にできます。

ひとつ余談なのですが、実は各駅からオレンジセルまで

列車が走った距離(区関数)が算出できてもよいです。

こちらの方が簡単かなぁ。

どうぞよろしくお願い致します!!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ