-
[BOJ]백준 4485번: 녹색 옷 입은 애가 젤다지?/DijkstraProblem Solving/BOJ(백준) 2020. 10. 13. 18:50
처음 다익스트라 알고리즘을 모를 때는 바보같이 BFS로 푸는 줄 알았지만.....
가중치 그래프에서 최단거리를 찾는 문제이기 때문에 다익스트라로 풀어야 한다 !!
#include <cstdio> #include <queue> #include <algorithm> #define INF 987654321 using namespace std; typedef struct { int x, y; }point; struct compare { bool operator()(pair<int, point> a, pair<int, point> b) { return a.first < b.first; } }; int main() { int n, map[130][130], dx[] = { 1,0,-1,0 }, dy[] = { 0,1,0,-1 }; priority_queue<pair<int, point>, vector<pair<int, point>>, compare> pq; int k = 0; while(++k){ scanf("%d", &n); if (!n)return 0; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++)scanf("%d", &map[i][j]); int dist[130][130]; fill(&dist[0][0], &dist[n + 1][n], INF); pq.push({ map[0][0],{0,0} }); dist[0][0] = map[0][0]; while (!pq.empty()) { int cost = -pq.top().first; point cur = pq.top().second; pq.pop(); for (int i = 0; i < 4; i++) { int nx = cur.x + dx[i], ny = cur.y + dy[i]; int ncost = map[ny][nx]; if (nx < 0 || nx >= n || ny < 0 || ny >= n)continue; if (dist[cur.y][cur.x] + ncost < dist[ny][nx]) { dist[ny][nx] = dist[cur.y][cur.x] + ncost; pq.push({ -dist[ny][nx],{nx,ny} }); } } } printf("Problem %d: %d\n",k,dist[n-1][n-1]); } return 0; }
간단한 문제이기 때문에 설명은 생략한다
(~^-^)~
'Problem Solving > BOJ(백준)' 카테고리의 다른 글
[BOJ]백준 19235번: 모노미노도미노 풀이 및 코드 (0) 2020.11.02 [BOJ]백준 20056번: 마법사 상어와 파이어볼 (0) 2020.10.19 [BOJ]백준 13460번: 구슬 탈출2 풀이 및 코드 (0) 2020.09.28 [BOJ]백준 19236번: 청소년 상어 풀이 및 코드 (0) 2020.09.28 [BOJ]백준 17825번: 주사위 윷놀이 풀이 및 반례 (0) 2020.09.26