250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(SWEA c++)1249. [SW 문제해결 응용] 4일차 - 보급로 본문
728x90
반응형
https://swexpertacademy.com/main/solvingProblem/solvingProblem.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
BFS로 문제 풀이.
핵심은 상하좌우로 이동하면서 이동하려는 좌표의 cost가 이전 cost보다 비싼 경우 가지 치기를 하여 시간을 줄이도록 하면 된다.
#include <climits>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main(void) {
int T;
int directX[4] = {-1, 1, 0, 0};
int directY[4] = {0, 0, -1, 1};
cin >> T;
for (int t = 1; t <= T; t++) {
int N;
cin >> N;
vector<vector<int>> board(N, vector<int>(N, 0));
vector<vector<int>> distance(N, vector<int>(N, 9999));
queue<pair<int, int>> q;
for (int i = 0; i < N; i++) {
string s;
cin >> s;
for(int j = 0; j < N; j++){
board[i][j] = s[j] - '0';
}
}
q.push({0, 0});
distance[0][0] = 0;
while(q.size()){
int x = q.front().first;
int y = q.front().second;
q.pop();
for (int i = 0; i < 4; i++){
int nx = x + directX[i];
int ny = y + directY[i];
if(nx >= 0 && nx < N && ny >= 0 && ny < N){
if(distance[nx][ny] > distance[x][y] + board[nx][ny]){
distance[nx][ny] = distance[x][y] + board[nx][ny];
q.push({nx, ny});
}
}
}
}
cout << "#" << t << " " << distance[N - 1][N - 1] << endl;
}
}
728x90
반응형
'SW Expert Academy' 카테고리의 다른 글
(SWEA c++)7985. Rooted Binary Tree 재구성 (0) | 2022.03.03 |
---|---|
(SWEA c++)2819. 격자판의 숫자 이어 붙이기 (0) | 2021.09.30 |
(SWEA c++)7964. 부먹왕국의 차원 관문 (0) | 2020.12.02 |
(SWEA c++)7853. 오타 (0) | 2020.12.01 |
(SWEA c++)7732. 시간 개념 (0) | 2020.12.01 |