티스토리 뷰
#include <stdio.h>
char map[101][101] = {0}; //x번째 컴퓨터와 관련있는 컴퓨터를 담는 배열
char visited[101] = {0}; //1과 관련이 있으면 1 없으면 0
void dfs(int k)
{
for(int i = 1; i<=map[k][0]; i++) {
if(visited[map[k][i]] == 0) {
visited[map[k][i]] = 1;
dfs(map[k][i]);
}
}
}
int main(void)
{
int ans = 0;
int n = 0;
scanf("%d", &n);
int t = 0;
scanf("%d", &t);
while(t--)
{
int a, b;
scanf("%d %d", &a, &b);
map[a][0]++;
map[a][map[a][0]] = b;
map[b][0]++;
map[b][map[b][0]] = a;
}
dfs(1);
for(int i = 2; i<=n; i++) if(visited[i] == 1) ans++;
printf("%d", ans);
}
https://www.acmicpc.net/problem/2606
풀이
1) 배열을 이용하여, 특정 컴퓨터와 관련된 컴퓨터들을 저장해 놓는다.
2) 1번째 컴퓨터부터 dfs을 이용하여, 연관있는 컴퓨터를 찾고, 그 연관있는 컴퓨터를 dfs함수에 집어 넣는다.
(단 이미 연관이 있었다면, dfs함수에 집어 넣지 않는다)
연관이 있을 때마다 visited배열을 0에서 1로 만든다.
3) dfs가 끝나면 visited배열 중 값이 1 인 것들의 합을 구하면 된다.
'c언어 > BAEKJOON' 카테고리의 다른 글
c언어 17505번 링고와 순열 (백준) (0) | 2022.07.09 |
---|---|
c언어 2004번 조합 0의 개수 (백준) (0) | 2022.07.09 |
c언어 14425번 문자열 집합 (백준) (0) | 2022.06.24 |
c언어 1874 스택 수열 (백준) (0) | 2022.06.18 |
c언어 2667번 단지번호붙이기 (백준) (0) | 2022.06.11 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 최대공약수
- 그래프
- 1835
- 플로이드
- union
- 6198번
- 그리디
- 최소 스패닝 트리
- 백준
- 카드
- 세그먼트 트리
- 오프라인 쿼리
- java
- 16120번
- BFS
- 트리
- 덱
- find
- C언어
- 정렬
- DP
- Mo.s
- C++
- Krustal
- 스택
- 1835번
- 6198
- 누적 합
- DFS
- 누적합
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함