티스토리 뷰

Algorithm/BOJ

백준 1916번 C++

poopooreum 2023. 8. 2. 20:09
반응형
백준 1916번 최단경로

https://www.acmicpc.net/problem/1916

1916번: 최소비용 구하기

첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그

www.acmicpc.net



정답 코드

#include <iostream>
using namespace std;

int INF = 987654321;

int arr[1001][1001];
bool v[1001];
int d[1001];

int n, m, a, b, c, s, e;

int getSmallIndex() {
	int min = INF;
	int index = 1;
	for (int i = 1; i <= n; i++)
	{
		if (d[i] < min && !v[i]) {
			min = d[i];
			index = i;
		}
	}
	return index;
}

void dijkstra(int start) {
	for (int i = 1; i <= n; i++) {
		d[i] = arr[start][i];
	}
	v[start] = 1;
	for (int i = 1; i <= n - 2; i++) 
	{
		int current = getSmallIndex();
		v[current] = 1;
		for (int j = 1; j <= n; j++)
		{
			if (!v[j]) {
				if (d[current] + arr[current][j] < d[j]) {
					d[j] = d[current] + arr[current][j];
				}
			}
		}
	}
}

int main() {
	for (int i = 1; i < 1001; i++)
		for (int j = 1; j < 1001; j++)
			arr[i][j] = INF;
		
	cin >> n >> m;
	for (int i = 0; i < m; i++)
	{
		cin >> a >> b >> c;
		if (arr[a][b] > c)
			arr[a][b] = c;
	}
	cin >> s >> e;

	dijkstra(s);
	cout << d[e];

}

문제 풀이

다익스트라 알고리즘을 이용해서 풀 수 있는 문제입니다. 저는 바킹둑님의 강의를 보고 코드를 구현했습니다!

반응형

'Algorithm > BOJ' 카테고리의 다른 글

백준 1926번 C++  (0) 2023.08.03
백준 1920번 C++  (0) 2023.08.02
백준 1914번 C++  (0) 2023.07.30
백준 1912번 C++  (0) 2023.07.30
백준 1904번 C++  (0) 2023.07.30
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함