<DFS BFS> ๋ฐฑ์ค 2606๋ฒ. ๋ฐ์ด๋ฌ์ค + ๋ค์
https://www.acmicpc.net/problem/2606
2606๋ฒ: ๋ฐ์ด๋ฌ์ค
์ฒซ์งธ ์ค์๋ ์ปดํจํฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ปดํจํฐ์ ์๋ 100 ์ดํ์ด๊ณ ๊ฐ ์ปดํจํฐ์๋ 1๋ฒ ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง๋ค. ๋์งธ ์ค์๋ ๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ ์์ ์๊ฐ ์ฃผ์ด
www.acmicpc.net
import sys
input = sys.stdin.readline
cnt = 0
##ํจ์
def dfs_virus(start):
global cnt
visited[start] = 1
print(start,"์์ ์คํ")
for i in graph[start]:
if visited[i] == 0: #๋ฐฉ๋ฌธ ์ํ์ผ๋ฉด
dfs_virus(i)
cnt += 1
#####main#########################
n = int(input()) ## ์ปดํจํฐ ๊ฐ์
link = int(input())
visited = [0]*(n+1)
graph = [ []*(n+1) for _ in range(n+1) ]
# [ [], [], [] ... ] ์ด๋ฐ ์์ผ๋ก ์์ฑ
for i in range(link):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a) ##์ ๊ณผ์ ์ ํตํด ๋ชจ๋ ์ถ๊ฐ๋จ
print("---------\n์ธ์ ๋
ธ๋๋ฆฌ์คํธ graph", *graph,sep="\n", end = "\n------\n")
dfs_virus(1)
print(cnt)
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ฐ์ <์ฃผ์ํ ์ >
1. graph = [ []*(n+1) for _ in range(n+1) ]
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด [ [], [], [].. ]๊ฐ ์์ฑ๋จ.
n+1๋งํผ ํด์ฃผ๋ ์ด์ ๋ 0๋ฒ๋ ธ๋๋ ์๊ธฐ ๋๋ฌธ์ 1๋ฒ๋ถํฐ ์์ฑํ๊ธฐ ์ํด ํ๋ ์ถ๊ฐ
2. graph[a].append(b)์ graph[b].append()
๋์ ๋ฐ.. a๋ฒ์งธ ๊ทธ๋ํ์ b๋ฅผ ์ถ๊ฐํ๊ณ b๋ฒ์งธ ๊ทธ๋ํ์ a๋ฅผ ์ถ๊ฐํ๋ค...
๊ทธ๋ผ ์ ์์ ์ถ๋ ฅ๋ ๊ฒ์ฒ๋ผ ์ธ์ ๋ ธ๋๋ฆฌ์คํธ๊ฐ ์์ฑ๋๋ค...
from collections import deque
import sys
input = sys.stdin.readline
n = int(input())
m = int(input())
graph = [ []*(n+1) for _ in range(n+1) ]
visited = [False] * (n+1)
for _ in range(m):
a, b = map(int , input().split())
graph[a].append(b)
graph[b].append(a)
print(*graph, sep = "\n")
def bfs(start):
visited[start] = True
q = deque()
q.append(start)
while q:
now = q.popleft()
for i in graph[now]:
if visited[i] == False :
visited[i] = True
q.append(i)
def dfs(start):
visited[start] = True
for i in graph[start]:
if visited[i] == False:
visited[i] = True
dfs(i)
dfs(1)
print(visited.count(True)-1) # ๋ณธ์ธ ๋
ธ๋ ์ ์\ใ
ฃ
3์ผ๋ง์ ๋ค์ ํ์ด๋ดค๋ค ์ผํํ dfs๋ bfs ๋ค ๊ตฌํด๋ด๋ฐ