[規格]No 11724-接続要素数(JAVA)
15003 ワード
接続要素とは?
まず
연결요소(Connected Component)
が何なのか分からなかったので探してみました.1つのグラフィックが接続されていない小さなグラフィックから構成される場合、小さなグラフィックは接続要素と呼ばれます.
例えば、上記の例1の図は、接続要素の個数が2であることを示す.
頂点と幹線を与える場合,接続要素の個数を求める方法はdfs,bfsがあり,よく知っているbfsを用いた.
コード(BFS使用)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class No11724_연결요소의개수 {
static int[][] graph;
static boolean[] visited;
static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String temp[] = br.readLine().split(" ");
N = Integer.parseInt(temp[0]); //정점의 개수
int M = Integer.parseInt(temp[1]); //간선의 개수
int conn =0; //연결요소의 개수
graph= new int[N+1][N+1];
visited = new boolean[N+1];
for (int i=0;i<M;i++) {
String s[] = br.readLine().split(" ");
graph[Integer.parseInt(s[0])][Integer.parseInt(s[1])] =1;
graph[Integer.parseInt(s[1])][Integer.parseInt(s[0])] =1;
}
for (int i=1;i<=N;i++) {
if (!visited[i]) {
bfs(i);
conn++;
}
}
System.out.println(conn);
}
public static void bfs (int n) {
Queue<Integer> queue = new LinkedList<>();
queue.add(n);
visited[n] = true;
while (!queue.isEmpty()) {
int current = queue.poll();
for (int i = 1; i <= N; i++) {
if (visited[i] == false && graph[current][i] == 1) {
visited[i] = true;
queue.add(i);
}
}
}
}
}
難点
これまで解いたbfs問題は2次元配列の形で与えられており,このような図形形式で頂点と幹線を与えた場合にどのように探索するか想像しにくい.
=>>まず隣接マトリクスにグラフィック情報を格納し、文を繰り返して頂点を巡ります!
Reference
この問題について([規格]No 11724-接続要素数(JAVA)), 我々は、より多くの情報をここで見つけました https://velog.io/@kekim20/백준-No11724-연결요소의-개수JAVAテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol