문제1248--지뢰밭을 완성하자

1248: 지뢰밭을 완성하자

시간제한 : 1.000 sec  메모리제한 : 128 MB

문제 설명

지뢰찾기 게임은 3가지 크기의 지뢰밭을 이용하여 게임을 진행합니다. 작은 지뢰밭은 9x9, 중간 크기의 지뢰밭은 16x16, 가장 큰 크기의 지뢰밭은 16x30입니다. 각 크기마다 지뢰는 9개, 40개, 99개가 랜덤한 위치에 심어진 상태로 게임을 진행합니다. 게임을 진행하기 위해서는 랜덤한 위치에 지뢰를 심은 후에 지뢰 주변 셀의 값을 주변 최대 8개 셀에 있는 지뢰 수로 바꾸어 주어야 합니다. 이 문제에서는 랜덤한 위치에 심어진 지뢰밭이 주어지면 주변 셀 값을 주변 지뢰 수를 계산하여 적절하게 설정해 주세요.

입력 설명

첫 줄에는 테스트케이스 T(1<=T<=50)가 주어집니다. 각 테스트케이스는 여러 줄에 주어집니다. 각 테스트케이스의 첫 줄에는 정수 S(0<=1<=2)가 주어집니다. S는 지뢰밭의 크기를 나타내며, 0은 작은 크기 지뢰밭, 1은 중간 크기 지뢰밭, 2는 큰 크기 지뢰밭을 나타냅니다. 그다음에는 지뢰밭의 크기에 따라 0과 -1로 구성된 지뢰밭 정보가 행 단위로 주어집니다.

출력 설명

각 테스트케이스마다 주어진 지뢰밭을 완성하여 주세요. 즉, 지뢰 주변 셀 값들이 주변 지뢰 수를 나타내도록 바꾸어 주세요.

입력 예시 Copy

1
0
0 -1 0 0 0 -1 0 0 0
0 0 -1 0 0 0 0 0 0
-1 -1 0 0 0 0 0 0 0
0 0 0 0 0 -1 0 0 0
0 0 0 -1 0 0 0 0 0
0 0 0 0 0 0 0 0 -1
0 0 0 0 0 0 0 -1 0
0 0 0 0 0 0 0 0 0
0 -1 0 0 0 0 0 0 0

출력 예시 Copy

1 -1 2 1 1 -1 1 0 0
3 4 -1 1 1 1 1 0 0
-1 -1 2 1 1 1 1 0 0
2 2 2 1 2 -1 1 0 0
0 0 1 -1 2 1 1 1 1
0 0 1 1 1 0 1 2 -1
0 0 0 0 0 0 1 -1 2
1 1 1 0 0 0 1 1 1
1 -1 1 0 0 0 0 0 0

도움

입력 데이터를 받아 2차원 배열에 저장한 후에 지뢰밭을 완성하는 함수로 전달하여 지뢰밭을 완성한 다음 결과를 출력을 해야 합니다.
2차원 배열은 동적 2차원 배열을 생성할 수 있지만 다음과 같이 벡터의 벡터를 사용하세요.
std::vector<std::vector<int>> field(9, std::vector<int>(9)); // small
std::vector<std::vector<int>> field(16, std::vector<int>(16)); // medium
std::vector<std::vector<int>> field(16, std::vector<int>(30)); // large

지뢰밭을 완성하는 함수의 예시는 다음과 같습니다.
void setupField(std::vector<std::vector<int>>& mineField);
 

출처/분류