toshipedia

様々なジャンルの好きなことをただ書いていく、ほのぼのブログです。

16/02/13 プログラム最短経路・最長経路の探索~再帰~

2016年2月14日
約 3 分

こんにちはー

今日はチョコを探しに、

献血してきました。

チョコは貰えなかったけど、アクエリアスは貰えて、血も減ってとても気分が良くなりました。佐々木です。

東京に来て、まだ2回しか献血してなかったんだね。

とりあえずスッキリした。

 

 

今回はですね、C言語での再帰による迷路の最短経路、最長経路の探索のプログラム

ってことで、なんか授業の課題とかで使えそうなやつを載っけます。

しかし、私のやり方以外にも、よりよい方法があると思いますので、評価を高く得たい場合は、さらに頑張ってください。

 

経路探索

|例えば下図に示すように,通行可能なマス目に’0’が,障害物であって通行不能なマス目に’+’が記されている盤を考えましょう.

|スタート地点をs,ゴール地点をgで指定して,最短経路及び最長経路を表示するプログラムを考えます。

|ただし,同一の場所を2度以上通ってはならない.

pict

今回はこの迷路を突破してみましょう!

パッと見、訳が分かりませんが、まぁいい。

 

考え方としては、

人間だったら問題ないけど、コンピュータさんはスタート地点を把握できてないので、

 

  1. スタート地点を教えてあげる
  2. とりあえず4方向に進んでみる
  3. 行き止まりだったら戻る
  4. 2,3を繰り返す
  5. ゴールに到着
  6. 2~5を繰り返し、最短経路・最長経路を探索

 

簡単ですね。

メイン関数は、迷路の準備と、探索する関数を作ってます。

このfindRoute内で再帰(loop)を使って、迷路を突破する感じですね。

make_boardでは、4方向進んだときに、障壁+の外側に行かないように、さらに+で囲っています。

そして、

一番重要な再帰の部分は

となります。

ただ、最短最長をアナログチックに判定してます。分からなくて。

頑張れば、最短最長を自動的に検出できると思いますので、頑張ってください。

 

 

結果

最短

min1

最長

max1

 

 

最後に全体のコードを載せておきます

そのうちにもっと分かり易く書き直したいと思います。

コードを説明するって難しい。

 

 

 

About The Author

佐々木 俊樹
スーパーマンを夢見て生きる.
好きな言葉は「死ぬこと以外かすり傷」.
amazon欲しいものリスト公開したので,心優しい方お願いします.
http://amzn.asia/dq0gKJ4
このブログは個人的なものであり,所属を代弁するものではありません.

Leave A Reply

*
*
* (公開されません)

Comment On Facebook