1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #include <stdio.h> #include <string.h> using namespace std; int ans[105] = { 0 }; int arr[105] = { 0 }; int visit[105] = { 0 }; int start, n; void dfs(int idx); int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &arr[i]); } for (int i = 1; i <= n; i++) { if (ans[i] == 1) continue; start = i; dfs(i); } int v = 0; for (int i = 1; i <= n; i++) { v += ans[i]; } printf("%d\n", v); for (int i = 1; i <= n; i++) { if (ans[i] == 1) printf("%d\n", i); } } void dfs(int idx) { if (visit[idx] == 1) { if (start == idx) { for (int i = 1; i <= n; i++) { if (visit[i] == 1) { ans[i] = 1; } } } else { memset(visit, 0, sizeof(visit)); } return; } visit[idx]++; dfs(arr[idx]); } | cs |
'알고리즘 > DFS' 카테고리의 다른 글
10451 순열 사이클 (0) | 2019.09.04 |
---|---|
9466 텀 프로젝트(hard) (0) | 2019.09.03 |
1991 트리 순회 (0) | 2019.08.26 |
17412 도시 왕복하기 1 (0) | 2019.08.22 |
11377 열혈강호3 (0) | 2019.08.22 |