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
|
# 음료수 얼려 먹기
n,m = map(int,input().split())
graph =[]
for i in range(n):
graph.append(list(map(int,input())))
print(graph)
#DFS 로 특정한 노드를 방문한 뒤에 연결된 모든 노드들도 방문
def dfs(x,y):
# 주어진 범위를 벗어나는 경우에는 즉시 종료
if x<=-1 or x>=n or y<=-1 or y>=m:
return False;
# 현재 노드를 아직 방문하지 않았다면
if graph[x][y] == 0:
graph[x][y] = 1
# 상, 하, 좌, 우의 위치도 모두 재귀적으로 호출
dfs(x -1, y)
dfs(x, y-1)
dfs(x +1, y)
dfs(x,y+1)
return True
return False
# 모든 노드(위치)에 대하여 음료수 채우기
result = 0
for i in range(n):
for j in range(m):
# 현재 위치에서 DFS 수행
if dfs(i,j) == True:
result+=1
print(result)
|
cs |
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
|
from collections import deque
# N,M을 공백으로 구분하여 입력받기
n,m = map(int,input().split())
# 2 차원 리스트의 맵 정보 입력 받기
graph =[]
for _ in range(n):
graph.append(list(map(int,input())))
# 이동할 네 방향 정의(상,하,좌,우)
dx = [-1,1,0,0]
dy = [0,0,-1,1]
#BFS 소스코드 구현
def bfs(x,y):
# 큐(Queue) 구현을 위해 deque 라이브러리 사용
queue = deque()
queue.append((x,y))
# 큐가 빌때 까지 반복
while queue :
x, y = queue.popleft()
# 현재 위치에서 네 방향으로 위치 확인
for i in range(4):
nx = x +dx[i]
ny = y +dy[i]
# 미로 찾기 공간을 벗어난 경우 무시
if nx < 0 or ny < 0 or nx >= n or ny >= m :
continue
# 벽인 경우 무시
if graph[nx][ny] == 0:
continue
# 해당 노드를 처음 방문 하는 경우에만 최단 거리 기록
if graph[nx][ny] == 1:
graph[nx][ny] = graph[x][y]+1
queue.append((nx,ny))
return graph[n -1][m-1]
print(bfs(0,0))
|
cs |