백준
[백준] 18352 특정 거리의 도시 찾기 [자바]
거북이같은곰
2022. 5. 26. 20:37
https://www.acmicpc.net/board/view/58477
글 읽기 - 테스트 케이스 추가 부탁드립니다.
댓글을 작성하려면 로그인해야 합니다.
www.acmicpc.net
https://steady-coding.tistory.com/82
[BOJ] 백준 1504번 : 특정한 최단 경로 (JAVA)
문제 방향성이 없는 그래프가 주어진다. 세준이는 1번 정점에서 N번 정점으로 최단 거리로 이동하려고 한다. 또한 세준이는 두 가지 조건을 만족하면서 이동하는 특정한 최단 경로를 구하고 싶
steady-coding.tistory.com
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
class Node implements Comparable<Node> {
int to;
int weight;
public Node(int to, int weight) {
this.to = to;
this.weight = weight;
}
@Override
public int compareTo(Node o) {
// TODO Auto-generated method stub
return weight - o.weight;
}
}
public class Main {
static ArrayList<ArrayList<Node>> graph = new ArrayList<>();
static int N,M,K,X;
static int[] distance;
static boolean[] visit;
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
X = Integer.parseInt(st.nextToken());
for(int i = 0; i <= N; i++) {
graph.add(new ArrayList<>());
}
for(int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine(), " ");
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
graph.get(start).add(new Node(end, 1));
}
distance = new int[N+1];
visit = new boolean[N+1];
dijkstra(X);
boolean result = false;
for(int i = 1; i <= N; i++) {
if(distance[i] == K) {
sb.append(i).append('\n');
result = true;
}
}
if(result)
System.out.println(sb);
else
System.out.println(-1);
}
static int dijkstra(int start) {
PriorityQueue<Node> pq = new PriorityQueue<>();
pq.add(new Node(start,0));
while(!pq.isEmpty()) {
Node tmp = pq.poll();
int to = tmp.to;
if(visit[to]) continue;
visit[to] = true;
for(Node n : graph.get(to)) {
if(distance[n.to] != 0 || visit[n.to]) continue;
distance[n.to] = n.weight + distance[to];
pq.add(new Node(n.to,distance[n.to]));
}
}
return distance[start];
}
}