์ฝ”ํ…Œ์ค€๋น„

<DFS BFS> ๋ฐฑ์ค€ 2606๋ฒˆ. ๋ฐ”์ด๋Ÿฌ์Šค + ๋‹ค์‹œ

์š”๋Œœ๋‹ค 2022. 7. 27. 15:49

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 ๋‹ค ๊ตฌํ•ด๋ด๋”ฐ