본문 바로가기
알고리즘 문제/자료구조&알고리즘

DFS/BFS 예제

by 태윤2 2020. 10. 21.
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>=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

 

 

 

'알고리즘 문제 > 자료구조&알고리즘' 카테고리의 다른 글

정렬 예제  (0) 2020.10.22
정렬  (0) 2020.10.21
DFS(Depth First Search)/BFC(Breadth First Search)  (0) 2020.10.21
구현  (0) 2020.10.19
그리디  (0) 2020.10.19