質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

814閲覧

迷路探索ができません

takotakotako

総合スコア8

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/08/07 17:11

前提・実現したいこと

迷路を作るプログラムはできたのですが,それを使って迷路探索ができずに困っています
この後のソースコードはどのようにしたらよいでしょうか?

発生している問題・エラーメッセージ

該当のソースコード

import random

幅と奥行きの設定 (どちらも奇数である必要がある)
height = 25
width = 35
maze = [[1 if 0<i<width-1 else 0 for i in range(width)] if 0<j<height-1 else [0 for i in range(width)] for j in range(height)] #通路:0 壁:1

def mazeprint(maze): #数字で表現された面を●や◯に変換する関数
c_dict={0:"□", 1:"■"}
c_maze = [[c_dict[maze[j][i]] for i in range(width)] for j in range(height)]
for i in range(height):
print("".join(c_maze[i]) )
print("")

開始点を定める
wl = [[2i+2,2j+2] for i in range(int((width-1)/2)-1) for j in range(int((height-1)/2)-1)] #未探索リスト
stt = wl.pop(random.randint(0, len(wl)-1)) #ランダムに開始点を定める
ps = [stt] #探索済みリスト

print("start Point: ", stt)
maze[stt[1]][stt[0]] = 0 #壁(1)を通路(0)に書き換える
mazeprint(maze) #迷路出力

探索する
dr =[[-1,0], [1,0], [0,-1], [0,1]] #探索方向のリスト

while(len(wl)>0):
random.shuffle(dr) #探索方向順をランダムに
for i in range(4): #このfor文内ではある座標sttの周辺4方向に対する探索のみ行う
nxtx = stt[0]+dr[i][0]*2 #探索候補のx座標
nxty = stt[1]+dr[i][1]*2 #探索候補のy座標
if maze[nxty][nxtx]==1 : #2マス先が通路でないとき
wl.remove([nxtx,nxty]) #未探索リストから削除
ps.append([nxtx,nxty]) #探索済みリストに追加
maze[nxty][nxtx] = 0 #2マス先を通路に変更
maze[nxty-dr[i][1]][nxtx-dr[i][0]] = 0 #1マス先を通路に変更
break
if i==3:
ps.remove([nxtx,nxty])
stt = ps[random.randint(0, len(ps)-1)]

完成した迷路を出力
mazeprint(maze)

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mokemokechicken

2019/08/07 22:43

Pythonのコードは Indentが崩れるとかなり読み辛いので Markdown形式のコード部分は バッククオート3つ ``` で囲うと読む方に優しいです。
hayataka2049

2019/08/07 23:59

「探索ができません」だけではどういう点で困っているのかがよくわからないので、もう少し具体的に困っていることを説明して頂けると回答しやすいです。
takotakotako

2019/08/08 00:51

作った迷路を解きたいのですが色々試してわからず困っておりました。
hayataka2049

2019/08/08 00:55

はい。ですから色々試しての部分を具体的に。何を考えて何を試したのかとか。
takotakotako

2019/08/08 01:01

深さ探索を用いてやろうとしたのですが、どのように関数とかに入れればいいのかわからなくて、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問