반응형
문제 : https://www.acmicpc.net/problem/2606
풀이 :
DFS 그래프로 풀었다...
전역으로 Cnt 놓고, 순서대로 시작 정점부터 재귀를 통해 Cnt하는 방법으로 풀었다.
static int cnt = 0;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());//컴퓨터 수
int M = Integer.parseInt(br.readLine());//쌍 갯수
LinkedList<Integer>[] adjList = new LinkedList[N+1];
boolean[] visited = new boolean[N+1];
for (int i = 0; i < adjList.length; i++) {
adjList[i] = new LinkedList<Integer>();
}
//간선 만들기
for (int i = 0; i < M; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
adjList[start].add(end);
adjList[end].add(start);
}
for (int j = 0; j < adjList.length; j++) {
Collections.sort(adjList[j]);
}
dfsList(1,adjList,visited);
System.out.println(cnt-1);//처음1번 컴퓨터는 빼야됨
}
static void dfsList(int v, LinkedList<Integer>[] adjList, boolean[] visited) {
visited[v] = true;
cnt ++;
Iterator<Integer> iter = adjList[v].iterator();
while(iter.hasNext()) {
int m = iter.next();
if(!visited[m]) {
dfsList(m,adjList,visited);
}
}
}
반응형
'Java > Algorithm' 카테고리의 다른 글
[Java-Algorithm] 백준 1789 풀이 (0) | 2021.06.25 |
---|---|
[Java-Algorithm] 백준 7576 토마토 풀이 (0) | 2021.06.15 |
[Java-Algorithm] 백준 2217 로프 풀이 (0) | 2021.06.14 |
[Java-Algorithm] 백준 4949 균형잡힌 세상 풀이 (0) | 2021.06.10 |
[Java-Algorithm] 백준 1759 암호 만들기 (0) | 2021.06.10 |