(백준/c++) 14940 - 쉬운 최단 거리 / DFS, 그래프📃 coding test/◽ 백준2024. 8. 16. 12:39
Table of Contents
728x90
" (백준/c++) 14940 - 쉬운 최단 거리 / DFS, 그래프 "
https://www.acmicpc.net/problem/14940
🏆 solved.ac 난이도: 실버1
이 문제는 쉽게 풀어서 solved.ac에 검색해봤는데 실버 1 문제당.. 힝 !!!
내 실력은 아직 골드5, 실버1 정도 되는거 같다 ㅠㅁㅠ
넓이 우선 문제로 시작점부터 찬찬히 넓혀가면 되는 문제다.
항상 BFS문제에서 실수하는 부분을 다시 짚고 넘어가려고 작성한다.
que에 조건이 되는 노드를 push 할 때 방문처리를 해주는거다.
pop 하면서 방문처리하니깐 괜찮지 않나? 생각하면서 항상 빼곤 한다.
그렇게 되면 아래와 같이 E가 que에서 pop되고 방문처리하기 전에 D에서 'visit false군!!" 하면서 que에 넣으면서 무한루프에 빠져버린다.


#include<iostream>
#include<queue>
#include<array>
using namespace std;
int ArrMap[1001][1001] = { 0, };
int ArrResult[1001][1001] = { 0, };
bool visit[1001][1001] = { false };
pair<int, int> direction[4] = {{ -1, 0}, {1, 0}, { 0, -1}, {0, 1} };
int main(void)
{
int N, M;
cin >> N >> M;
pair<int, int> targetPoint;
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < M; ++j)
{
cin >> ArrMap[i][j];
if (ArrMap[i][j] == 2)
{
targetPoint.first = i;
targetPoint.second = j;
}
}
}
queue<pair<int, int>> que;
que.push(make_pair(targetPoint.first, targetPoint.second));
ArrResult[targetPoint.first][targetPoint.second] = 0;
while (!que.empty())
{
auto temp = que.front();
visit[temp.first][temp.second] = true;
que.pop();
for (int i = 0; i < 4; ++i)
{
int X = temp.first + direction[i].first;
int Y = temp.second + direction[i].second;
if (ArrMap[X][Y] == 0)
{
continue;
}
else if (X >= 0 && X < N && Y >= 0 && Y <M && visit[X][Y] == false)
{
ArrResult[X][Y] = ArrResult[temp.first][temp.second] + 1;
visit[X][Y] = true;
que.push(make_pair(X, Y));
}
}
}
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < M; ++j)
{
if (i == targetPoint.first && j == targetPoint.second)
{
cout << 0 << " ";
}
else if (ArrResult[i][j] == 0 && ArrMap[i][j] != 0 )
{
cout << -1 << " ";
}
else
{
cout << ArrResult[i][j] << " ";
}
}
cout << endl;
}
return 0;
}
728x90
'📃 coding test > ◽ 백준' 카테고리의 다른 글
(백준/c++) 11403 - 경로찾기 / BFS, 그래프 (0) | 2024.08.16 |
---|---|
(백준/c++) 11724 - 연결 요소의 개수 / BFS, 그래프 (0) | 2024.08.16 |
(백준/ C++) 12101- 1, 2, 3 더하기2 / 다이나믹 프로그래밍, 재귀 (0) | 2024.07.19 |
(백준/ C++) 1010 - 다리 놓기 / 다이나믹 프로그래밍, 재귀 (0) | 2024.07.19 |
(백준/ C++) 9095 - 1, 2, 3 더하기 / 다이나믹 프로그래밍, 재귀 (0) | 2024.07.19 |
@핑크코냥 :: 핑크코냥
안 하는 것 보다 낫겠지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!