Algorithm/DFS&BFS

[์ด์ฝ”ํ…Œ] DFS/BFS/ ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ

์ •ํ˜ธ๋‚˜ 2024. 10. 30. 20:56

๐Ÿ“• ๋ฌธ์ œ

https://www.acmicpc.net/problem/18352

 

 

๐Ÿ“„ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ํ’€์ด

BFS ์‚ฌ์šฉ,

๐Ÿ’ป ๋‚ด ์ฝ”๋“œ

visited ์‚ฌ์šฉํ•ด์„œ ๋‹ค์‹œ ํ‘ธ๋Š”๋ฐ ์˜ค๋ฅ˜

from collections import deque
import sys

# n,m,k,x = map(int, input().split())
n,m,k,x = map(int, sys.stdin.readline().split())


graph = [[]for _ in range(n+1)]

# print(graph)
# q๋Š” ์ถœ๋ฐœ๋„์‹œ
q = deque([x])

# set()์œผ๋กœ ์„ค์ •์•ˆํ•˜๋ฉด ๋ฐฑ์ค€์—์„œ ์˜ค๋ฅ˜
visited = set()

for _ in range (m):
    a,b = map(int, input().split()) 
    graph[a].append(b)
q.append(a)
visited.add(a)

# print(graph)

# ์ตœ๋‹จ๊ฑฐ๋ฆฌ k์ธ ๋„์‹œ ํ•˜๋‚˜๋„ ์—†์œผ๋ฉด -1, ์ „์ฒด -1๋กœ ์ดˆ๊ธฐํ™”
distance = [-1]* (n+1)
# ์ถœ๋ฐœ๋„์‹œ x์—์„œ x๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” ํ•ญ์ƒ 0
distance[x] = 0

# BFS์ˆ˜ํ–‰


while q:
    now = q.popleft()
    # ํ˜„์žฌ ๋„์‹œ์—์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋„์‹œ ํ™•์ธ
    for next_node in graph[now]:
        # ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋„์‹œ์ผ ๋•Œ : -1
        if next_node not in visited:
            # ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ฐฑ์‹ 

            distance[next_node] = distance[now]+1
            q.append(next_node)
            visited.add(next_node)


if k in distance:
    for i in range(1,n+1):
        if distance[i] == k:
            print(i)
else:
    print(-1)

 

๐Ÿ’ป ์ด์ฝ”ํ…Œ ๋‹ต์•ˆ

  from collections import deque

n,m,k,x = map(int, input().split())
graph = [[]for _ in range(n+1)]

# print(graph)


for _ in range (m):
    a,b = map(int, input().split()) 
    graph[a].append(b)

# print(graph)

# ์ตœ๋‹จ๊ฑฐ๋ฆฌ k์ธ ๋„์‹œ ํ•˜๋‚˜๋„ ์—†์œผ๋ฉด -1, ์ „์ฒด -1๋กœ ์ดˆ๊ธฐํ™”
distance = [-1]* (n+1)
# ์ถœ๋ฐœ๋„์‹œ x์—์„œ x๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” ํ•ญ์ƒ 0
distance[x] = 0

# BFS์ˆ˜ํ–‰
# q๋Š” ์ถœ๋ฐœ๋„์‹œ
q = deque([x])


# ์—ฌ๊ธฐ๋ถ€ํ„ฐ ์ดํ•ด ๋‹ค์‹œ
while q:
    now = q.popleft()
    # ํ˜„์žฌ ๋„์‹œ์—์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋„์‹œ ํ™•์ธ
    for next_node in graph[now]:
        # ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋„์‹œ์ผ ๋•Œ : -1
        if distance[next_node] == -1:
            # ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ฐฑ์‹ 
            distance[next_node] = distance[now]+1
            q.append(next_node)


check = False
for i in range(1,n+1):
    if distance[i] == k:
        print(i)
        check = True

if check == False:
    print(-1)

 

๐Ÿ“ ์ฐธ๊ณ ์ž๋ฃŒ

 

 

https://velog.io/@kyeun95/๋ฐฑ์ค€-18352๋ฒˆ-ํŠน์ •-๊ฑฐ๋ฆฌ์˜-๋„์‹œ-์ฐพ๊ธฐ

 

[๋ฐฑ์ค€] 18352๋ฒˆ : ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ

https://www.acmicpc.net/problem/2606\[๋ฐฑ์ค€] 18352 : ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ ๐Ÿฅˆ(์‹ค๋ฒ„2)๐ŸŽฏ 29.897%โฐ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„ :55๋ถ„์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํ˜• : BFS & DFSโœ… ๋ฌธ์ œ ์š”์•ฝ์ฒซ์งธ ์ค„์— ๋„์‹œ์˜ ๊ฐœ์ˆ˜ N, ๋„๋กœ์˜ ๊ฐœ์ˆ˜ M,

velog.io

 

โ˜บ๏ธ ์ƒˆ๋กœ ์•Œ๊ฒŒ ๋œ ์ง€์‹