백준 문제 링크
순열 사이클
- BFS를 사용했다.
- 기본 bfs 함수 형식으로, 방문 처리하는 함수를 만들어준다.
- for i in range(1,N+1)로 만약 i에 방문하지 않았다면,
bfs(i)를 실행하고, answer + 1 해준다.
이 코드의 의미는 문제의 설명처럼 1에서 시작했을 때,
1 -> 3 -> 5 -> 7의 사이클동안 다 1,3,5,7을 방문처리하고,
1개의 사이클이므로 answer + 1 해주는 것이다.
from collections import deque
def bfs(x):
queue = deque()
queue.append(x)
while queue:
v = queue.popleft()
for i in lst[v]:
if not visited[i]:
visited[i] = True
queue.append(i)
T = int(input())
for _ in range(T):
N = int(input())
visited = [False] * (N+1)
lst = [[] for _ in range(N+1)]
x = list(map(int, input().split()))
for i in range(N):
lst[i+1].append(x[i])
answer = 0
for i in range(1,N+1):
if not visited[i]:
bfs(i)
answer += 1
print(answer)