์น๊ตฌ ๊ด๊ณ๋ ๋ํ์ ์ธ ๊ทธ๋ํ ํ์ ๋ฌธ์ ์ค ํ๋๋ค. ๋๋น ์ฐ์ ํ์(BFS)๊ณผ ๊น์ด ์ฐ์ ํ์(DFS)์ด๋ผ๋ ์์ฃผ ์ ๋ช ํ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฒ๋ค์ด ์๋ค. ์ด๋ค ๋ฌธ์ ๋ค์ ๋ ๊ฐ์ง ์ค ์ด๋ค ๋ฐฉ์์ ํํด๋ ํ๋ฆฌ๊ฒ ์ง๋ง ์ด๋ค ๋ฌธ์ ๋ ๋ ์ค ํ๋์ ๋ฐฉ๋ฒ์ ํํ๋ ๊ฒ์ด ํจ์ฌ ํจ์จ์ ์ผ ๋๊ฐ ์๋ค. ์ด ๋ฌธ์ ๋ ๊ทธ๋ฐ ๋ฌธ์ ์ ํ ์ค ํ๋๋ค.
์ด ๋ฌธ์ ์์ ๊ตฌํด์ผ ํ๋ ๊ฒ์ ๋ฌด์์ผ๊น?
A โ B โ C โ D โ E ์ ๊ด๊ณ๋ฅผ ๋ฌป๊ณ ์๋ค. ๊ทธ๋ํ ํ์ ์ฉ์ด๋ก ๋งํ๋ฉด ๊น์ด4 ์ด์์ธ ๋ ธ๋๊ฐ ์กด์ฌํ๋๋์ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค. ์ฆ, ์ด ๋ฌธ์ ๋ ์ด ๊ทธ๋ํ์ ๊น์ด๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. DFS๋ก ํ์ด์ผ ํ๋ค
๋ฐฑ์ค์ ํ ํ๋ก์ ํธ ๋ฌธ์ ๋ฅผ ํ์๋๋ ์ด ๋ฌธ์ ๋ ์ฌ์ดํด์ ๊ตญํ๋ผ์๋ง ์๊ฐํ๊ฒ ๋๋ค. ์๋์ ํ ์คํธ ์ผ์ด์ค ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ชจ๋ ๋ ธ๋๋ค์ด ํ๋์ ์ฌ์ดํด์ ๋ค์ด์์ง๋ง ์์ ๋ ธ๋๊ฐ ์ด๋์ธ๊ฐ์ ๋ฐ๋ผ ์ฐพ์ ์ ์๋ ๊น์ด๊ฐ ๋ค๋ฅด๋ค
0์์ ์์ํ๋ฉด 0 โ 1 โ 2 โ 3 โ (0) ์ค๋ณต๋๋ ๊ด๊ณ ๋๋ฌธ์ ๊น์ด 3๊น์ง ๋ฐ์ ์ฐพ์ง ๋ชปํ๋ค.
ํ์ง๋ง 4์์ ์์ํ๋ฉด 4 โ 1 โ 2 โ 3 โ 0 ์์๋ก ๊น์ด 4์ ๊ด๊ณ๋ฅผ ์ฐพ์ ์ ์๋ค.
5 5
0 1
1 2
2 3
3 0
1 4
๊ฒฐ๊ตญ ํ๋์ ์ฌ์ดํด์ ์ด๋ฃฌ๋ค๊ณ ํด์ ๊ทธ ์ฌ์ดํด ๋ด์ ์ด๋ ์ง์ ์์ ์์ํ๋ ๋์ผํ ๊น์ด๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒ ์๋ ๊ฒ์ด๋ค. ๋ชจ๋ ๋ ธ๋์ ๋ํด์ ํ์ฌ ๋ ธ๋์์ ์ถ๋ฐํ์ ๋ ๊น์ด4๊น์ง ๋ค์ด๊ฐ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํด์ผ ํ๋ค.
๋ฌด์กฐ๊ฑด 0๋ฒ ๋ ธ๋์์ ์์๋๋ ์ฝ๋์๋ค. ์ฅ๋ ฌํ๊ฒ ์คํจํ๋ค.
# ABCDE
N, M = map(int, input().split())
graph = [[] for _ in range(N+1)]
for _ in range(M):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
friend = set()
def dfs(i, depth):
if depth == 4:
return True
friend.add(i)
for x in graph[i]:
if x not in friend and dfs(x, depth+1):
return True
friend.remove(i)
return False
print(int(dfs(0, 0)))
๊น์ด 4๋ฅผ ์ฐพ์ผ๋ฉด ๊ทธ ์ฆ์ True๋ฅผ ๋ฐํํ๋ค. ํจ์์ ๊ฒฐ๊ณผ ๊ฐ์ด True ๊ฒฝ์ฐ True๋ฅผ ๋ฐํํ ์ ์๋๋ก ์ฌ๊ท๋ก ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ๊น์ด 4์ธ ๊ณณ์ ํ ๋ฒ์ด๋ผ๋ ์ฐพ์ผ๋ฉด ์ด ์ฌ๊ท ํจ์๋ ์ ์ฒด์ ์ผ๋ก True๋ฅผ ๋ฐํํ๊ฒ ๋๋ค.
์ด๋ค ๋ ธ๋์์๋ ์ง ํ ๊ตฐ๋ฐ๋ผ๋ True๋ฅผ ๋ฐํํ๋ ๊ณณ์ด ์์ผ๋ฉด ๋ฐ๋ก 1์ ๋ฐํํ ์ ์๋๋ก sol() ํจ์๋ฅผ ๊ตฌํํ๋ค.
# ABCDE
N, M = map(int, input().split())
graph = [[] for _ in range(N)]
visited = [False]*(N)
for _ in range(M):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
def dfs(i, depth):
if depth == 4:
return True
visited[i] = True
for x in graph[i]:
if not visited[x] and dfs(x, depth+1):
return True
visited[i] = False
return False
def sol():
for i in range(N):
if dfs(i, 0):
return True
return False
print(int(sol()))