2022. 7. 8. 00:03γπ± Algorithm/Back tracking
https://www.acmicpc.net/problem/1987
μ κ·Ό
μ²μμ queue λ₯Ό μ¬μ©ν΄ bfs λ‘ μ κ·Όνμ§λ§, μ΄ λ¬Έμ λ dfs λ‘λ§ ν μ μλ€.
νλμμ BFS μ κ·Όμ λνλ΄κ³ , λΆνμμ DFS μμ μ κ·Όμ λνλΈλ€.
λ¬Έμ μμ ꡬνκ³ μ νλ κ²μ μ΅λν μΌλ§λ§νΌ λ»μ΄λκ° μ μλμ§λ₯Ό ꡬνλ κ²μ΄κΈ°μ, λΆνμμ DFS μμΌλ‘ μ κ·Όν΄μΌ λ΅μ ꡬν μ μλ€.
μ½λ
r, c = map(int, input().split())
maps = []
for _ in range(r):
maps.append(list(input()))
ans = 0
alphas = set()
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def dfs(x, y, count):
global ans
ans = max(ans, count)
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < r and 0 <= ny < c and not maps[nx][ny] in alphas:
alphas.add(maps[nx][ny])
dfs(nx, ny, count+1)
alphas.remove(maps[nx][ny])
alphas.add(maps[0][0])
dfs(0, 0, 1)
print(ans)
alphas λΌλ set μ λ°©λ¬Έν λ Έλμ μνλ²³μ λ΄λλ€. 리μ€νΈλ‘ λ΄μλ λκ² μ§λ§, μ΄μ°¨νΌ μ€λ³΅λλ μμλ νμμκΈ°μ set μΌλ‘ μ μΈνλ€.
λ Έλ(ny, nx) κ° if λΆκΈ°λ¬Έμ ν΄λΉλλ€λ μλ―Έλ, μλ‘κ² λ Έλλ₯Ό λ»μ΄λκ° μ μλ€λ λ»μ΄κΈ°μ count μ κ°μ + 1 νμ¬ μ¬κ·νΈμΆνλ€.
dfs() ν¨μκ° μ’ λ£λλ©΄ ν΄λΉ λ Έλ(ny, nx) λ₯Ό set μμ λΉΌμ€μΌνλ€.
'π± Algorithm > Back tracking' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λ°±μ€ 1174 μ€μ΄λλ μ νμ΄μ¬ (0) | 2022.12.26 |
---|