DFS 코드
| dx = [1, -1, 0, 0] |
| dy = [0, 0, 1, -1] |
| |
| def dfs(y, x, room, cnt): |
| global move |
| |
| move = max(move, cnt) |
| |
| for i in range(4): |
| ny = y + dy[i] |
| nx = x + dx[i] |
| if 0 <= ny < n and 0 <= nx < n and room+1 == rooms[ny][nx]: |
| dfs(ny, nx, rooms[ny][nx], cnt+1) |
| |
| |
| tc = int(input()) |
| for idx in range(1, tc+1): |
| n = int(input()) |
| rooms = [list(map(int, input().split())) for _ in range(n)] |
| |
| max_move = 0 |
| room_num = 9999999999 |
| for i in range(n): |
| for j in range(n): |
| move = 0 |
| dfs(i, j, rooms[i][j], 1) |
| if max_move < move: |
| room_num = rooms[i][j] |
| max_move = move |
| elif max_move == move: |
| room_num = min(room_num, rooms[i][j]) |
| |
| print('#{} {} {}'.format(idx, room_num, max_move)) |
BFS 코드
| import collections |
| |
| dx = [1, -1, 0, 0] |
| dy = [0, 0, 1, -1] |
| |
| def bfs(y, x, cnt): |
| queue = collections.deque([(y, x)]) |
| |
| while queue: |
| y, x = queue[0][0], queue[0][1] |
| queue.popleft() |
| room = rooms[y][x] |
| |
| for i in range(4): |
| ny = y + dy[i] |
| nx = x + dx[i] |
| if 0 <= ny < n and 0 <= nx < n and room+1 == rooms[ny][nx]: |
| cnt += 1 |
| queue.append((ny, nx)) |
| |
| return cnt |
| |
| |
| tc = int(input()) |
| for idx in range(1, tc+1): |
| n = int(input()) |
| rooms = [list(map(int, input().split())) for _ in range(n)] |
| |
| max_move = 0 |
| room_num = 9999999999 |
| for i in range(n): |
| for j in range(n): |
| move = bfs(i, j, 1) |
| if max_move < move: |
| room_num = rooms[i][j] |
| max_move = move |
| elif max_move == move: |
| room_num = min(room_num, rooms[i][j]) |
| |
| print('#{} {} {}'.format(idx, room_num, max_move)) |