-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
선생님, 강의에있는 토마토문제를 3차원으로 변형한것을 풀어보았는데요, 차원이 하나 늘어났을 뿐인데 어디서 잘못된것인지 잘 모르겠어서 질문드립니다.
21.06.03 15:39 작성 조회수 107
0
#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
struct Loc {
int z;
int x;
int y;
Loc(int a, int b, int c) {
z = a;
x = b;
y = c;
}
};
int tom[103][103][103];
int dis[103][103][103];
int main() {
queue<Loc> q;
int m, n, h;
cin >> m >> n >> h;
int flag = 0;
for (int i = 0;i < h;i++) {
for (int j = 0;j < n;j++) {
for (int k = 0;k < m;k++) {
cin >> tom[i][j][k];
if (tom[i][j][k] == 1)
q.push(Loc(i, j, k));
}
}
}
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 };
while (!q.empty()) {
Loc tmp = q.front();
q.pop();
for (int i = 0;i < 6;i++) {
int xx = tmp.x + dx[i];
int yy = tmp.y + dy[i];
int zz = tmp.z + dz[i];
if (tom[zz][xx][yy] == 0 && xx >= 0 && xx < n && yy >= 0 && yy < m && zz >= 0 && zz < h) {
tom[zz][xx][yy] = 1;
dis[zz][xx][yy] = dis[tmp.z][tmp.x][tmp.y] + 1;
q.push(Loc(zz, xx, yy));
}
}
}
int max = 0;
for (int i = 0;i < h;i++) {
for (int j = 0;j < n;j++) {
for (int k = 0;k < m;k++) {
if (tom[i][j][j] == 0) { cout << -1;return 0; }
}
}
}
for (int i = 0;i < h;i++) {
for (int j = 0;j < n;j++) {
for (int k = 0;k < m;k++) {
if (dis[i][j][j] > max)max = dis[i][j][k];
}
}
}
cout << max;
return 0;
}
먼저 좋은 강의를 제공해주셔서 정말 감사하다는 말씀 드리고 싶습니다. 너무너무 큰 도움을 받고 있습니다.
그리고 강의에 없는 문제를 질문드려서 정말 죄송합니다.ㅜㅜ
이 문제는 강의에 있는 토마토문제에서 한 차원 늘렸을 뿐이고, 그래서 구조체에 z변수를 추가해서 똑같이 풀어보았는데요. 아무리 봐도 맞는 코드인것같고, 백준에 있는 테스트케이스를 넣어봐도 잘 나오는데 틀렸다고만 나오니 답답하네요
2차원과 똑같이 코드를 구성하면 안되는이유가 있는것일까요..?
답변을 작성해보세요.
답변 1