728x90
문제
https://www.acmicpc.net/problem/14940
문제 분석
지도의 크기가 우선 정해진다.
갈 수 없는 곳은 0, 갈 수 있는 곳은 1, 시작 위치는 2로 표시 된다.
2에서 시작하여 좌우양옆으로 방문한 순서를 출력해주는 문제이다.
여기서 갈 수 있는 곳 1인 곳인데 갈 수 없는 곳이라면 -1로 출력한다.
알고리즘 설계
우선 지도의 크기를 정해서 지도를 그린다.
시작 위치는 따로 관리하며 지도엔 0으로 표시한다.
갈 수 있는 곳은 -1로 표시하여 나중에 1번쨰로 도착한 곳과 헷갈리지 않도록 해준다.
이후 BFS를 사용하여 몇번쨰에 도착하였는지 map에 적어준 후 출력한다.
유의점
x축과 y을 착각하지 않고 적는 것이 중요하다.
코드
#include <iostream>
#include <queue>
using namespace std;
int map[1001][1001];
int moveX[4]{ 1, -1, 0, 0 };
int moveY[4]{ 0, 0, 1, -1 };
int main()
{
int x, y, input, startX, startY;
queue<pair<int, int>> q;
cin >> x >> y;
for (int i = 0; i < x; ++i)
{
for (int j = 0; j < y; ++j)
{
cin >> input;
if (input == 2)
{
q.push(make_pair(i, j));
map[i][j] = 0;
}
else if (input == 1)
map[i][j] = -1;
else
map[i][j] = input;
}
}
while (!q.empty())
{
int posX = q.front().first;
int posY = q.front().second;
for (int i = 0; i < 4; ++i)
{
int addX = posX + moveX[i];
int addY = posY + moveY[i];
if (map[addX][addY] == -1)
{
map[addX][addY] = map[posX][posY] + 1;
q.push(make_pair(addX, addY));
}
}
q.pop();
}
for (int i = 0; i < x; ++i)
{
for (int j = 0; j < y; ++j)
cout << map[i][j] << ' ';
cout << '\n';
}
}
728x90
'ALGORITHM > C++ - 백준' 카테고리의 다른 글
[백준 1463] 1로 만들기 (0) | 2023.10.18 |
---|---|
[백준 5525] IOIOI (1) | 2023.10.18 |
[백준 16928] 뱀과 사다리 게임 (1) | 2023.10.18 |
[백준 10026] 적록색약 (1) | 2023.10.18 |
[백준 24479] 알고리즘 수업 - 깊이 우선 탐색 1 (0) | 2023.08.01 |
댓글