반응형
알고리즘 분류에는 플로이드 와샬 알고리즘이라고 분류 되어있지만 dfs를 이용해서 풀었다.
자세한 설명은 코드에 주석을 보면 좋을 것 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N, M, result;
static boolean[][] conn; // 컴퓨터 간의 연결을 나타내기 위한 배열
static boolean[] visited; // 방문을 체크하기 위한 배열
public static void main(String[] agrs) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
M = Integer.parseInt(br.readLine());
conn = new boolean[N + 1][N + 1];
visited = new boolean[N + 1];
for (int i = 1; M >= i; ++i) {
String str = br.readLine();
StringTokenizer st = new StringTokenizer(str);
int first = Integer.parseInt(st.nextToken());
int second = Integer.parseInt(st.nextToken());
conn[first][second] = true;
conn[second][first] = true;
} // 1 과 2가 연결 되어 있다는 것은 2와 1도 연결 되는것.
dfs(1);
System.out.println(result);
}
static void dfs(int start) {
visited[start] = true; // 방문 처리
for (int i = 1; N >= i; ++i) { // 모든 컴퓨터를 돌면서
// 연결된 컴퓨터이면서 방문하지 않은 컴퓨터를 확인
if (conn[start][i] == true && visited[i] == false) {
result++; // 조건에 해당되면 +1
dfs(i); // 조건에 해당되는 컴퓨터를 기준으로 반복
}
}
}
}
반응형
'컴퓨터 > 백준' 카테고리의 다른 글
java - 백준 알고리즘 - 1012 유기농 배추 (0) | 2020.03.05 |
---|---|
java - 백준 알고리즘 - 2667 단지번호붙이기 (0) | 2020.03.03 |
java - 백준 알고리즘 - 2493 탑 (0) | 2020.03.02 |
JAVA - 백준 알고리즘 - 1520 내리막길 (0) | 2020.03.01 |
JAVA - 백준 알고리즘 - 14852 타일 채우기 3 (0) | 2020.02.27 |