이중반복문 - 2차원배열, 좌표, 정점 별 특징
visited - 단순 정점, 간선 정보
visited | 이중반복문 | |
---|---|---|
문제 차이 | 단순 정점, 간선 정보 | 2차원배열, 좌표, 정점 별 특징 |
배열 선언 | arr=[ []*(n+1) for _ in range(n+1) ] | arr=[] |
배열 삽입 | arr[a].append(b) | arr.append() |
백준 | 1260, 2606, 11724 | 4963, 2667 |
# visited
arr=[ []*(n+1) for _ in range(n+1) ]
arr[a].append(b)
# 이중 반복문
arr=[]
arr.append()
import sys
input=sys.stdin.readline
from collections import deque
n,m,v=map(int, input().split())
arr=[[]*(n+1) for i in range(n+1)]
visited_bfs=[False]*(n+1)
visited_dfs=[False]*(n+1)
for i in range(m):
a,b=map(int, input().split())
arr[a].append(b)
arr[b].append(a)
def bfs(v):
queue=deque([v])
visited_bfs[v]=True
while queue:
k=queue.popleft()
print(k, end=" ")
for i in sorted(arr[k]):
if visited_bfs[i]==False:
queue.append(i)
visited_bfs[i]=True
def dfs(v):
visited_dfs[v]=True
print(v, end=" ")
for i in sorted(arr[v]):
if visited_dfs[i]==False:
dfs(i)
dfs(v)
print()
bfs(v)
import sys
input=sys.stdin.readline
from collections import deque
n,m=map(int, input().split())
arr=[]
dx, dy= [-1, 1, 0, 0], [0, 0, -1, 1]
for i in range(n):
arr.append(list(map(int, input().rstrip())))
def bfs(i, j):
queue=deque()
queue.append((i, j))
while queue:
x,y = queue.popleft()
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if nx<0 or nx>=n or ny<0 or ny>=m:
continue
if arr[nx][ny]==1:
arr[nx][ny]=arr[x][y]+1
queue.append((nx, ny))
return arr[n-1][m-1]
print(bfs(0,0))
BFS - 최단거리, 최소횟수
DFS - 모든 경우 탐색, 이동시에 가중치/제약
BFS | DFS | |
---|---|---|
최단거리, 최소횟수 | 모든 경우 탐색, 이동시에 가중치/제약 | |
특징 | 항상 최단 경로를 보장 | 최단거리 보단 모든 경우 탐색 |
방문 | 연결된 가까운 노드 | 연결된 브랜치 모두 방문 |
문제 | 2178 |
bfs(너비우선) : 최단거리, 또는 최소횟수
dfs(깊이우선) : 모든 경우