BOJ 1619, 최소비용구하기
문제유형
다익스트라
문제풀이
다익스트라 기본 문제, 원리를 이해하고 풀면 좋습니다.
- 이차원 a 배열을 생성, a값을 모두 inf(1000000000) 로 초기화
- x,y,z 값을 입력으로 받는다. 그리고 a[x][y] 가 z보다 큰경우 값을 업데이트 한다. (작은값을 찾아야 하므로)
- start, end를 입력으로 받는다.
- d를 배열로 생성한다. n+1 만큼 /마찬가지로 방문여부를 확인할 수 있는 c를 n+1만큼 선언 및 초기화
- n만큼 d에 inf 를 업데이트, n만큼 c를 false 로 업데이트
- d[start] = 0 으로 초기화 시작지점, d의 역할은 비용 이라고 보면됀다.
- 반복문을 n-1 만큼 순회한다.
- 노드의 최솟지점을 찾아야 하므로 min과 x를 선언합니다. (min은 최댓값으로 x는 -1), x는 인덱스를 저장할것임
- n만큼 순회하면서 방문하지 않은곳이고 min이 d[i] 보다 큰경우 min과 x를 업데이트 합니다.
- 업데이트할 노드를 찾았으므로 c[x] 방문처리합니다.
- n만큼 순회하면서 x와 연결되어있는 노선을 모두 파악해서 d[i]의 최소비용을 업데이트합니다.
- d[i]의 값이 d[x] + a[x][i] 보다 큰 경우 업데이트 해줍니다.
- d[end]값을 출력해줍니다.
코드
package backjun; import java.util.*; import java.io.*; public class BOJ_1916_최소비용구하기 { static int inf = 1000000000; static int[][] a = new int[1001][1001]; public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int M = Integer.parseInt(br.readLine()); for(int i=0; i<a.length; i++) { Arrays.fill(a[i], 1000000000); } for(int i=0; i<M; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); int X = Integer.parseInt(st.nextToken()); int Y = Integer.parseInt(st.nextToken()); int Z = Integer.parseInt(st.nextToken()); if(a[X][Y]>Z) a[X][Y]=Z; } StringTokenizer st = new StringTokenizer(br.readLine()); int start = Integer.parseInt(st.nextToken()); int end = Integer.parseInt(st.nextToken()); int[] d = new int[N+1]; boolean[] c = new boolean[N+1]; for(int i=1; i<=N; i++) { d[i] = inf; c[i] = false; } d[start] = 0; for(int i=0; i<N-1; i++) { int min = inf+1; int x = -1; for(int j=1; j<=N; j++) { if(c[j]==false && min>d[j]) { min = d[j]; x = j; } } c[x] = true; for(int j=1; j<=N; j++) { if(d[j]>d[x]+a[x][j]) { d[j] = d[x]+a[x][j]; //현재비용 + 간선비용 } } } System.out.println(d[end]); } }
'알고리즘' 카테고리의 다른 글
완주하지못한선수 / k번째 수 (0) | 2021.05.08 |
---|---|
알고리즘 :: 신규 아이디 추천 (javascript) (0) | 2021.05.07 |
숨바꼭질4 (0) | 2020.11.07 |
특정거리의 도시찾기 (0) | 2020.11.07 |
멀쩡한사각형 (0) | 2020.11.07 |
댓글
이 글 공유하기
다른 글
-
완주하지못한선수 / k번째 수
완주하지못한선수 / k번째 수
2021.05.08 -
알고리즘 :: 신규 아이디 추천 (javascript)
알고리즘 :: 신규 아이디 추천 (javascript)
2021.05.07 -
숨바꼭질4
숨바꼭질4
2020.11.07 -
특정거리의 도시찾기
특정거리의 도시찾기
2020.11.07
댓글을 사용할 수 없습니다.