250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(SWEA c++)1249. [SW 문제해결 응용] 4일차 - 보급로 본문
728x90
반응형
https://swexpertacademy.com/main/solvingProblem/solvingProblem.do
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 |