C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: [C++]DFSとBFSアルゴリズムを使い迷路の順路を調べる


(過去ログ 104 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■62234 / inTopicNo.1)  [C++]DFSとBFSアルゴリズムを使い迷路の順路を調べる
  
□投稿者/ レッサーパンダ (1回)-(2011/09/29(Thu) 09:21:33)

分類:[C/C++] 

現在6時間以上考えているのですが分かりません。
windowsでcgywinを使いg++でコンパイルしています。

スタックとキューを使用し迷路の順路を出力するという内容なのですが、
何から手を出していいのか分かりません。

インプットはtxtファイルに書かれた迷路で

10,7
+-+-+-+-+-+
|S| | | | |
+ +-+ + + +
| | | |   |
+ + + +-+ +
| | | | | |
+ +-+-+ +-+
| | |     |
+-+ + +-+-+
| |G|   |
+-+-+-+-+-+

上記のような感じです。(Sがスタート Gがゴール)

これを (1,1),(1,2)....のような形で出力するという内容です。

お力を貸していただければ幸いです。


引用返信 編集キー/
■62235 / inTopicNo.2)  Re[1]: [C++]DFSとBFSアルゴリズムを使い迷路の順路を調べる
□投稿者/ 774RR (611回)-(2011/09/29(Thu) 09:58:28)
何がどこまでできたのか、何がわからないのか、くらいは書いておくんなまし。
全部丸投げならお断り。

まずは問題を分割すべし。
0.迷路を解くに「都合の良い内部データ表現形式」を設計する。
1.設問ファイルを読み込んで、その内部形式に変換する
2−1.内部形式を深さ優先で解く
2−2.内部形式を広さ優先で解く
3.解いた結果を設問された形式で出力する

提示の例題をどう解けばゴールに到達できるのか良くわからん・・・
引用返信 編集キー/
■62261 / inTopicNo.3)  Re[1]: [C++]DFSとBFSアルゴリズムを使い迷路の順路を調べる
□投稿者/ Jitta (6回)-(2011/09/29(Thu) 21:51:45)
Jitta さんの Web サイト
No62234 (レッサーパンダ さん) に返信
 大学の卒研が、マイクロ マウス(通称 マッピー)を使ったシーケンス制御だったのですが、
それで迷路を脱出するプログラムを作って遊んでた。

> 10,7
> +-+-+-+-+-+
> |S| | | | |
> + +-+ + + +
> | | | |   |
> + + + +-+ +
> | | | | | |
> + +-+-+ +-+
> | | |     |
> +-+ + +-+-+
> | |G|   |
> +-+-+-+-+-+

 1行目の「10,7」って、何でしょうね?横には5マスしかないし、5マスということは
11文字読み込まなければならない。縦も5マスなので、11行読まなければならない。
10と7は、どう使うんでしょうね?
 私が昔やったのは、「左を1ビット目、上を2ビット目、右を3ビット目、下を4ビット目に割り当て、
壁のあるビットを1にする」です。例示の迷路だと、、、
+-+-+-+-+-+
|7|F|7|7|7|
+ +-+ + + +
|5|7|5|9 4|
+ + + +-+ +
|5|D|D|7|D|
+ +-+-+ +-+
|D|7|3 8 E|
+-+ + +-+-+
|F|D|9 A E|
+-+-+-+-+-+
こんなデータ。で、スタートとゴールには、上位4ビットを使ってマークする、と。

 スタックとキューを使うって、どうするんでしょうね。今の私がやるなら、スタートとゴール以外で、
一方向にしか道がない、つまり行き止まりの箇所を、分岐点まで埋めていく、という事をします。
これを、行き止まりがスタートとゴールだけになるまで繰り返す、と。

引用返信 編集キー/
■62264 / inTopicNo.4)  Re[2]: [C++]DFSとBFSアルゴリズムを使い迷路の順路を調べる
□投稿者/ επιστημη (2673回)-(2011/09/29(Thu) 22:23:35)
επιστημη さんの Web サイト
> スタックとキューを使うって、どうするんでしょうね

んーとおそらく
1- 各マスにおいて現在マスの位置をスタックに積み
2- 右折/前進/左折のうち"そっちに行ける"かつ"まだそっちに行ったことがない"マスに進む。
3- 2において選択肢がなくなったときはスタックを巻き戻して後戻り
...を、"ゴールが見つかる"または"スタートに戻ってしまう"まで繰り返す。

んじゃないかな。つまりは三分木を深さ優先(DFS)で辿る、と。

引用返信 編集キー/
■62279 / inTopicNo.5)  Re[3]: [C++]DFSとBFSアルゴリズムを使い迷路の順路を調べる
□投稿者/ 774RR (612回)-(2011/09/30(Fri) 11:33:20)
皆さん親切すぎかも・・・

各部屋は東西南北4方向にドアまたは壁がある=4本の腕を持つノードである。
来た方向へは直接戻らない(戻るとしたらトラックバック)と考えると、3分木と考えてよい。

DFS 深さ優先探索の話は既に出ているので省略。
BFS 幅優先探索の場合はキューを使うことになるだろう。

深さ優先探索で最初に出た経路は必ずしも最短経路とは限らない、っつことで、
解なしの場合と、解が複数ある場合の考慮は必要。
# 設問に最短経路を求めよとは書いてないみたいだが

マイクロマウスの場合、屈曲回数が少ないルートのほうがメカ的に安定だったりするので
[重み付け探索] になったりするわけですな。
引用返信 編集キー/
■62300 / inTopicNo.6)  Re[4]: [C++]DFSとBFSアルゴリズムを使い迷路の順路を調べる
□投稿者/ レッサーパンダ (2回)-(2011/10/02(Sun) 13:23:24)
皆様返信ありがとうございました!
結局この問題を解くことはできませんでしたが
勉強になりました。
日本語の方があまり得意ではないので
言葉足らずのところがあり申し訳ありませんでした。

レッサーパンダ
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -