https://www.acmicpc.net/problem/2644
BFS씀
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Baek2644 { // BFS
public static int n, rel1, rel2;
public static ArrayList<ArrayList<Integer>> arrayList = new ArrayList<ArrayList<Integer>>();
public static int visited[];
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
visited = new int[n + 1];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
rel1 = Integer.parseInt(st.nextToken());
rel2 = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(br.readLine());
for(int i = 0; i < n + 1; i++)
arrayList.add(new ArrayList<Integer>());
while(m-- > 0) {
st = new StringTokenizer(br.readLine(), " ");
int in1 = Integer.parseInt(st.nextToken());
int in2 = Integer.parseInt(st.nextToken());
arrayList.get(in1).add(in2);
arrayList.get(in2).add(in1);
}
visited[rel1] = 1;
System.out.println(bfs(rel1));
}
public static int bfs(int start) {
Queue<Integer> queue = new LinkedList<Integer>();
queue.add(start);
while(!queue.isEmpty()) {
int out = queue.remove();
for(int i = 0; i < arrayList.get(out).size(); i++) {
if(visited[arrayList.get(out).get(i)] == 0) {
visited[arrayList.get(out).get(i)] = visited[out] + 1;
queue.add(arrayList.get(out).get(i));
}
}
}
if(visited[rel2] == 0) return -1;
else return visited[rel2] - 1;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[BaekJoon] 백준 1789번 _ 수들의 합 for JAVA _ 그리디 알고리즘 (0) | 2022.02.16 |
---|---|
[BaekJoon] 백준 1010번 _ 다리 놓기 for JAVA _ 조합 (0) | 2022.02.08 |
[BaekJoon] 백준 11725번 _ 트리의 부모 찾기 for JAVA _ BFS 알고리즘 (0) | 2022.02.05 |
[BaekJoon] 백준 7562번 _ 나이트의 이동 for JAVA _ BFS 알고리즘 (0) | 2022.02.03 |
[BaekJoon] 백준 1697번 _ 숨바꼭질 for JAVA _ BFS 알고리즘 (0) | 2022.02.01 |