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


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

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

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

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

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

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:itochan No.1

回答回数20ベストアンサー獲得回数1

ポイント10pt

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

M.Hiroi's Home Page / Puzzle De Programming

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

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

id:lemkun No.2

回答回数5ベストアンサー獲得回数0

ポイント10pt

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

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

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

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

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

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

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

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

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

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

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

id:objectm No.3

回答回数1ベストアンサー獲得回数0

ポイント25pt

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

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

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

id:miku1973

なるほど!!

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

今理解に努めています。

2004/05/10 14:52:11
id:nankichi No.4

回答回数562ベストアンサー獲得回数2

ポイント25pt

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

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

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

事前準備

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

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

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

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

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

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

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

探索ループ

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

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

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

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

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

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

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

もう一度、1へ。

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

id:miku1973

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

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

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

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

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

2004/05/10 18:41:00

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません