DFS 디버깅

기린이·2021년 12월 28일
0

문제

import sys
sys.setrecursionlimit(10000)


dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

def dfs(x, y):
  if grid[x][y] != 4:
    grid[x][y] = 4

  for i in range(4):
    nx = x + dx[i]
    ny = y + dy[i]

    if nx<0 or nx>= 16 or ny<0 or ny>=16:
      continue

    else:
      if grid[nx][ny] != 1 or grid[nx][ny] != 4: # 여기가 틀렸다!!!!!!!!!!!
        dfs(nx, ny)

i = int(input())
grid = [list(map(int,list(input()))) for _ in range(16)]
# visited = [False for _ in range(16 for _ in range(16))]
for row in range(16):
    for col in range(16):
        if grid[row][col] == 2:
            start_row, start_col = row, col
        if grid[row][col] == 3:
            end_row, end_col = row, col

dfs(start_row, start_col)

if grid[end_row][end_col] == 4:
  answer = 1
else:
  answer = 0

print(f'#{i} {answer}')

방문했거나(4) 벽(1)이면 안돌아야되는데

if grid[nx][ny] != 1 or grid[nx][ny] != 4: # 여기가 틀렸다!!!!!!!!!!! 이 부분에서 or로 엮어줘서 틀림

걍 and로 바꿔주면 된다.

import sys
sys.setrecursionlimit(10000)


dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

def dfs(x, y):
  # print('x, y', x, y )
  if grid[x][y] != 4:
    grid[x][y] = 4

  for i in range(4):
    nx = x + dx[i]
    ny = y + dy[i]

    if nx<0 or nx>= 16 or ny<0 or ny>=16:
      continue

    elif grid[nx][ny] == 1 or grid[nx][ny] == 4:
      continue

    else:
      dfs(nx, ny)

i = int(input())
grid = [list(map(int,list(input()))) for _ in range(16)]
# visited = [False for _ in range(16 for _ in range(16))]
for row in range(16):
    for col in range(16):
        if grid[row][col] == 2:
            start_row, start_col = row, col
        if grid[row][col] == 3:
            end_row, end_col = row, col

print(start_row, start_col)
print(end_row, end_col)

dfs(start_row, start_col)


if grid[end_row][end_col] == 4:
  answer = 1
else:
  answer = 0
print(f'#{i} {answer}')
profile
중요한 것은 속력이 아니라 방향성

0개의 댓글