728x90
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | import sys sys.stdin = open("미로2_input.txt") def find_start(maze): # 시작점을 찾아주는 함수 for i in range(N): for j in range(N): if maze[i][j] == 2:# 완전탐색을 이용하여 출발지부터 먼저 찾아준다. return i, j # 찾은 출발지 i, j 를 리턴 시켜준다. def bfs(x, y): Q = [] Q.append((x, y)) # enQ visited[x][y] = 1 # 방문체크 while Q: x, y = Q.pop(0) # deQ # 3인지 체크 return 1 if maze[x][y] == 3: # 출구이면 1 반환 return 1 for i in range(4): # 인접할 수 있는 정점은 4개 nx, ny = x + dx[i], y + dy[i] # 방향설정 if nx < 0 or nx == N: continue # 인덱스 체크 if ny < 0 or ny == N: continue if visited[nx][ny] == 1 : continue # 방문체크 if maze[nx][ny] == 1: continue # 벽체크 Q.append((nx, ny)) visited[nx][ny] = 1 return 0 # 출구에 가지 못하고 모든 칸 방문 T = 10 # 테스트케이스 N = 100 # 미로판 dx = [-1, 1, 0, 0] # 가로 방향 dy = [0, 0, -1, 1] # 세로 방향 for tc in range(1, T+1): #테스트 케이스 no = int(input()) # 테스트케이스 번호 maze = [list(map(int, input())) for _ in range(N)] # 미로의 데이터 값 visited = [[0]*(N) for _ in range(N)] # 방문체크 sx, sy = find_start(maze) #시작점을 찾고 리턴 받은 i, j 값을 넣어준다. print("#{} {}".format(tc, bfs(sx, sy))) | cs |
728x90
'알고리즘 > SWAE' 카테고리의 다른 글
최소합 (0) | 2021.04.14 |
---|---|
2635. 수 이어가기. (0) | 2021.04.11 |
5174. subtree, 5176 이진탐색, 5177. 이진 힙, 5178. 노드의 합 (0) | 2021.04.06 |
[SWAE] 1231.중위순회 (0) | 2021.04.05 |
[백준] (단계별 - for 문) 2438, 2741, 2742, 10871, 11021, 11022, 15552 번문제.. (0) | 2021.03.06 |