[알고리즘]/자료구조
[자료구조] 그래프 최단거리 (BFS)
쿠릉쿠릉 쾅쾅
2022. 3. 1. 03:00
728x90
그래프 최단 거리 (BFS)
문제
다음 그래프에서 1번 점정에서 각 정점으로 가는 최소 이동 간선수를 출력하세요.
입력 설명
첫째 줄에는 정점의 수 N(1<=N<=20)와 간선의 수 M이 주어진다. 그 다음부터 M줄에 걸쳐 연결정보가 주어진다.
출력 설명
1번 정점에서 각 정점으로 가는 간선수 2번 정점부터 차례대로 출력하세요.
입력예제1
6 9
1 3
1 4
2 1
2 5
3 4
4 5
4 6
6 2
6 5
출력예제1
2 : 3
3 : 1
4 : 1
5 : 2
6 : 2
📌 코드 구현
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Prac {
static int n, m;
static ArrayList<ArrayList<Integer>> graph;
static boolean[] check;
static int[] dis;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
n = sc.nextInt(); // 정점 수
m = sc.nextInt(); // 간선 수
graph = new ArrayList<>();
for(int i=0; i<=n; i++)
graph.add(new ArrayList<>());
check = new boolean[n+1];
dis = new int[n+1];
for(int i=0; i<m; i++) {
int from = sc.nextInt();
int to = sc.nextInt();
graph.get(from).add(to);
}
check[1] = true;
BFS(1);
for(int i=2; i<=n; i++) {
System.out.println(i+ " : " + dis[i]);
}
}
static void BFS(int start) {
Queue<Integer> queue = new LinkedList<>();
check[start] = true;
dis[start] = 0;
queue.offer(start);
while(!queue.isEmpty()) {
int curr = queue.poll();
for(int i : graph.get(curr)) {
if(!check[i]) {
check[i] = true;
queue.offer(i);
dis[i] = dis[curr]+1;
}
}
}
}
}
2 : 3
3 : 1
4 : 1
5 : 2
6 : 2
728x90