DFS遍歴n*mの地図
1.図
出発点を表す.歩くことができることを表して、'#'は障害を表して、この図に対して遍歴して、そして歩く歩数を統計します
2.アルゴリズムの原理
図を変更すると、アクセスの準備をするノードを1つのキューで保存することができ、最初に開始点をキューに入れ、ヘッダノードにアクセスし、アクセスするときに、その上下左右のノードを探索し、未アクセスを満たし、キューに入れず、ノードは'.これをキューに入れ、アクセスが終了するとノードをマークし、そのノードをキューから削除して、ペアが空になるまでペアのヘッダノードにアクセスします.
3.コード実装(python)
4.結果出力
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........
出発点を表す.歩くことができることを表して、'#'は障害を表して、この図に対して遍歴して、そして歩く歩数を統計します
2.アルゴリズムの原理
図を変更すると、アクセスの準備をするノードを1つのキューで保存することができ、最初に開始点をキューに入れ、ヘッダノードにアクセスし、アクセスするときに、その上下左右のノードを探索し、未アクセスを満たし、キューに入れず、ノードは'.これをキューに入れ、アクセスが終了するとノードをマークし、そのノードをキューから削除して、ペアが空になるまでペアのヘッダノードにアクセスします.
3.コード実装(python)
# f = lambda:map(int, input().split())
# n, m = f()
#
# g = [''] * n
#
# for i in range(n):
# g[i] = input()
n = 9
m = 11
v = [[0] * m for i in range(n)]
g = ['.#.........',
'.#.#######.',
'.#.#.....#.',
'.#.#.###.#.',
'.#.#..@#.#.',
'.#.#####.#.',
'.#.......#.',
'.#########.',
'...........']
#
si, sj = 0, 0
for i in range(n):
for j in range(m):
if g[i][j] == '@':
si = i
sj = j
print(si, sj)
#
l = []
def bfs(i, j):
c = 0
# Q
Q = [(i, j)]
while Q:
c += 1
i, j = Q[0]
l.append((i, j))
# print(g[i][j])
# , 、 Q 、 '.' , Q
if 0 < j and not v[i][j-1] and (i, j-1) not in Q and g[i][j-1] == '.':
Q.append((i, j-1))
if j < m-1 and not v[i][j+1] and (i, j+1) not in Q and g[i][j+1] == '.':
Q.append((i, j+1))
if 0 < i and not v[i-1][j] and (i-1, j) not in Q and g[i-1][j] == '.':
Q.append((i-1, j))
if i < n-1 and not v[i+1][j] and (i+1, j) not in Q and g[i+1][j] == '.':
Q.append((i+1, j))
# mark (i, j)
v[i][j] = 1
# Q
Q.remove((i, j))
return c
# dfs
print(bfs(si, sj))
print(l)
4.結果出力
:
4 6
59
:
[(4, 6), (4, 5), (4, 4), (3, 4), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (3, 8), (4, 8), (5, 8), (6, 8), (6, 7), (6, 6), (6, 5), (6, 4), (6, 3), (6, 2), (5, 2), (4, 2), (3, 2), (2, 2), (1, 2), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (0, 10), (1, 10), (2, 10), (3, 10), (4, 10), (5, 10), (6, 10), (7, 10), (8, 10), (8, 9), (8, 8), (8, 7), (8, 6), (8, 5), (8, 4), (8, 3), (8, 2), (8, 1), (8, 0), (7, 0), (6, 0), (5, 0), (4, 0), (3, 0), (2, 0), (1, 0), (0, 0)]