前提・実現したいこと
迷路探索プログラムを自作したい。
現在、独学でQiitaにあるpythonで迷路を解くアルゴリズム(リンク参照)および
アルゴリズムクイックリファレンスを用い勉強しています。
しかしながら、iswall,getWalls,getEdge関数の中身が何をしているのか理解できません。
特にgetwalls内にて配列を足しているところがわかりません。
全くの初心者ですので、可能であれば、詳しく教えていただきたいです。
https://qiita.com/sasanquaneuf/items/77bf6518b4bf97bcd15b
該当のソースコード
python
1# 迷路をグラフにする:本質的に深さ優先探索 2import itertools as it 3 4def isWall(s): 5 return 1 if s == '$' else 0 6 7def getWalls(arr, i, j): 8 return isWall(arr[i+1][j]) + isWall(arr[i-1][j]) + isWall(arr[i][j+1]) + isWall(arr[i][j-1]) 9 10def getEdge(arr, i, j, edges, v, c): 11 for (a,b) in zip([1,-1,0,0], [0,0,1,-1]): 12 if isWall(arr[i+a][j+b]) == 0: 13 arr[i+a][j+b] = '$' 14 if arr[i+2*a][j+2*b] == 0: 15 vn = v 16 cn = c + 1 17 else: 18 vn = arr[i+2*a][j+2*b] 19 edges.append((v, vn, c)) 20 cn = 1 21 getEdge(arr, i+2*a, j+2*b, edges, vn, cn) 22 23vs = 0 24edges = list() 25arr = list() 26for line in open('maze_input.txt', 'r'): 27 arr.append(list(line)) 28height = len(arr) 29width = len(arr[height - 1]) 30cellidi = range(1,width,2) 31cellidj = range(1,height,2) 32for i,j in it.product(cellidi, cellidj): 33 if getWalls(arr, i, j) == 2: 34 arr[i][j] = 0 35 elif arr[i][j] == ' ': 36 vs += 1 37 arr[i][j] = vs 38 39# 今回のデータ用の設定 40getEdge(arr, 3, 7, edges, 1, 1)
試したこと
アルゴリズムクイックリファレンスを読んだ
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。