알고리즘/PS

[C++] 백준 7569 : 토마토

BigmacGood 2022. 3. 22. 14:44

https://www.acmicpc.net/problem/7569

 

7569번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,

www.acmicpc.net

백준 7569번 토마토를 풀어봤습니다.

기존 2차원 BFS문제에서 3차원으로 바꼈습니다.

변수가 3차원인것만 제외하면 2차원과 푸는 방법이 똑같습니다.

 

아래는 전체 코드입니다.

#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

int m, n, h;

int map[100][100][100];
int check[100][100][100];
bool visited[100][100][100];
bool checkZero;

int dx[6] = { 1,-1,0,0,0,0 };
int dy[6] = { 0,0,1,-1,0,0 };
int dz[6] = { 0,0,0,0,1,-1 };

queue<pair<int, pair<int, int>>> q;

void BFS() {

	while (!q.empty()) {
		int z = q.front().first;
		int x = q.front().second.first;
		int y = q.front().second.second;
		visited[z][x][y] = 1;
		q.pop();

		for (int i = 0; i < 6; i++) {
			int next_z = z + dz[i];
			int next_x = x + dx[i];
			int next_y = y + dy[i];

			if (next_z >= 0 && next_z < h
				&& next_x >= 0 && next_x < n
				&& next_y >= 0 && next_y < m
				&& visited[next_z][next_x][next_y] == 0
				&& map[next_z][next_x][next_y] == 0) {

				q.push(make_pair(next_z, make_pair(next_x, next_y)));
				visited[next_z][next_x][next_y] = 1;
				map[next_z][next_x][next_y] = 1;
				check[next_z][next_x][next_y] = check[z][x][y] + 1;
			}
		}
	}
}

int main() {
	int temp;
	cin >> m >> n >> h;
	for (int k = 0; k < h; k++) {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				cin >> temp;
				map[k][i][j] = temp;
				if (temp == 1) {
					q.push(make_pair(k,make_pair(i,j)));
				}
				if (temp == 0) {
					checkZero = 1;
				}
			}
		}
	}
	if (checkZero == 0) {
		cout << 0 << '\n';
		return 0;
	}
	BFS();

	int day = 0;
	for (int k = 0; k < h; k++) {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				if (map[k][i][j] == 0) {
					cout << -1 << '\n';
					return 0;
				}
				if (check[k][i][j] > day)
					day = check[k][i][j];
			}
		}
	}

	cout << day << '\n';

	return 0;
}

 

'알고리즘 > PS' 카테고리의 다른 글

[C++] 백준 9184 : 신나는 함수 호출  (0) 2022.03.24
[C++] 백준 1697 : 숨바꼭질  (0) 2022.03.22
[C++] 백준 1003 : 피보나치 함수  (0) 2022.03.21
[C++] 백준 7576 : 토마토  (0) 2022.03.18
[C++] 백준 2178 : 미로찾기  (0) 2022.03.18