(1) BFS
import sys
from collections import deque, defaultdict
def bfs(start, plane_cnt) :
q = deque()
q.append(start)
visit[start] = 1
while q :
if sum(visit) == N :
return plane_cnt
now = q.popleft()
for next in relation[now] :
if visit[next] == 0 :
q.append(next) # 큐에 넣는다는 것
plane_cnt+=1 # 비행기에 탄다는 것
visit[next] = 1 # 그 국가는 방문한다는 것
# 큐에 넣을 때!! 방문처리도 하고, 비행기를 하나 더 쓴다는 것이라서 비행기 +1
T = int(sys.stdin.readline().rstrip())
for _ in range(T) :
# 비행기의 종류 M
relation = defaultdict(list) # 이걸 for 문 밖에 두었었습니다.
N,M = map(int, sys.stdin.readline().rstrip().split())
for i in range(M) :
a,b = map(int, sys.stdin.readline().rstrip().split())
relation[a].append(b)
relation[b].append(a)
# 국가의 수 N(2 ≤ N ≤ 1 000)
visit = [ 0 for _ in range(N+1) ]
# 1번 국가부터
print(bfs(1,0))
(2) 이 방법 말고도 MST의 성질을 이용하는 풀이
T = int(sys.stdin.readline().rstrip())
for _ in range(T) :
# 비행기의 종류 M
N,M = map(int, sys.stdin.readline().rstrip().split())
for i in range(M) :
a,b = map(int, sys.stdin.readline().rstrip().split())
print(N-1)
def bfs(nation) :
q = deque()
q.append((nation, [0 for _ in range(N+1)], 0))
while q :
now_nation, visit, airplane_cnt = q.popleft()
visit[now_nation] = 1
if sum(visit)==N :
return airplane_cnt
for nxt in rel[now_nation] :
if visit[nxt]==0:
q.append((nxt, visit.copy(), airplane_cnt+1))
T = int(sys.stdin.readline().rstrip())
for _ in range(T) :
# 비행기의 종류 M
N,M = map(int, sys.stdin.readline().rstrip().split())
rel = defaultdict(list)
for i in range(M) :
a,b = map(int, sys.stdin.readline().rstrip().split())
rel[a].append(b)
rel[b].append(a)
# 상근이가 모든 국가를 여행하기 위해 타야 하는 비행기 종류의 최소 개수를 출력
# 국가 : 1 ≤ a, b ≤ n
min_cnt = 100000
for i in range(1,N+1) :
tmp_cnt = bfs(i)
if type(tmp_cnt)==int :
min_cnt = min(min_cnt, tmp_cnt)
print(min_cnt)
relation = defaultdict(list) # 이걸 for 문 밖에 두었었습니다.
import sys
from collections import deque, defaultdict
def bfs(start, plane_cnt) :
q = deque()
q.append(start)
visit[start] = 1
while q :
if sum(visit) == N :
return plane_cnt
now = q.popleft()
for next in relation[now] :
if visit[next] == 0 :
q.append(next) # 큐에 넣는다는 것
plane_cnt+=1 # 비행기에 탄다는 것
visit[next] = 1 # 그 국가는 방문한다는 것
# 큐에 넣을 때!! 방문처리도 하고, 비행기를 하나 더 쓴다는 것이라서 비행기 +1
T = int(sys.stdin.readline().rstrip())
relation = defaultdict(list)
for _ in range(T) :
# 비행기의 종류 M
N,M = map(int, sys.stdin.readline().rstrip().split())
for i in range(M) :
a,b = map(int, sys.stdin.readline().rstrip().split())
relation[a].append(b)
relation[b].append(a)
# 국가의 수 N(2 ≤ N ≤ 1 000)
visit = [ 0 for _ in range(1001) ]
# 1번 국가부터
print(bfs(1,0))