전체 글 186

실전 알고리즘 0x1D강 - 다익스트라 알고리즘

다익스트라 알고리즘(1950년대) [ 알고리즘 설명 ] - 하나의 시작점으로부터 다른 모든 정점까지의 최단 거리를 구하는 알고리즘 - 플로이드 알고리즘은 음수인 사이클만 아니면 음수인 간선이 있어도 작동하지만 다익스트라 알고리즘은 음수인 간선이 있으면 작동하지 않는다. ( 벨만포드 알고리즘을 사용하면 해결된다. ) - 길찾기 알고리즘으로 A*알고리즘이 있다. (내비게이션에서의 길 찾기처럼 100% 정확한 최단거리를 내지 않아도 되고 정점의 개수가 너무 많아 현실적으로 다익스트라 알고리즘을 사용할 수 없을 때 쓰는 근사 알고리즘이다) [ 구현 ] - 새로운 정점을 추가할 때 모든 정점에서 추가된 정점까지 거리를 확인하면 O(VE)가 되고 미리 거리를 계산해두고 거기서 최솟값을 찾는다면 O(V^2+E)가 되..

백준 1753번 - C++

#include using namespace std; #define X first #define Y second int v, e, st; //{비용, 정점 번호} vector adj[20005]; const int INF = 1e9 + 10; int d[20005]; // 최단 거리 테이블 int main(void) { ios::sync_with_stdio(0); cin.tie(0); cin >> v >> e >> st; fill(d, d + v + 1, INF); while (e--) { int u, v, w; cin >> u >> v >> w; adj[u].push_back({ w,v }); } priority_queue pq; d[st] = 0; // 우선순위 큐에 {0, 시작점} 추가 pq.pus..

백준 문제풀이 2022.06.06