BOJ 6593商業ビル
20214 ワード
6方向に沿ってBFSを実行し、距離を求めればよい.座標はtuple STLで実現される.
私は1時間考えましたが、間違った原因は出力時の最後です.撮ってくれなかったので、ずっと間違えていました.別の場所でかき集める.ううう
私は1時間考えましたが、間違った原因は出力時の最後です.撮ってくれなかったので、ずっと間違えていました.別の場所でかき集める.ううう
#include <bits/stdc++.h>
using namespace std;
int L, R, C;
string building[31][31];
int dist[31][31][31];
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};
int main() {
cout.sync_with_stdio(0);
cin.tie(0);
while(true){
bool flag = false;
cin >> L >> R >> C;
if(L == 0 && R == 0 && C == 0) break;
//initialize dist to -1
for(int i = 0; i < L; i++){
for(int j = 0; j < R; j++) {
fill(dist[i][j], dist[i][j] + C, -1);
}
}
queue<tuple<int, int, int>> Q;
tuple<int, int, int> End;
for(int i = 0; i < L; i++) {
for(int j = 0; j < R; j++) {
cin >> building[i][j];
string input = building[i][j];
for(int k = 0; k < C; k++) {
if(input[k] == 'S') {
Q.push(make_tuple(i, j, k));
dist[i][j][k] = 0;
}
if(input[k] == 'E') {
End = make_tuple(i, j, k);
}
}
}
}
while(!Q.empty()) {
if(flag) break;
auto cur = Q.front(); Q.pop();
int curX, curY, curZ;
tie(curZ, curX, curY) = cur;
for(int i = 0; i < 6; i++) {
int nz = curZ + dz[i];
int ny = curY + dy[i];
int nx = curX + dx[i];
if(nz < 0 || nz >= L || nx < 0 || nx >= R || ny < 0 || ny >= C) continue;
if(dist[nz][nx][ny] != -1) continue;
if(building[nz][nx][ny] == '#') continue;
Q.push(make_tuple(nz, nx, ny));
dist[nz][nx][ny] = dist[curZ][curX][curY] + 1;
if(building[nz][nx][ny] == 'E') {
flag = true;
cout << "Escaped in " << dist[nz][nx][ny] << " minute(s)." << '\n';
break;
}
}
}
if(!flag){
cout << "Trapped!" << '\n';
}
}
return 0;
}
今度は印刷されたものをよく見ます.無実だReference
この問題について(BOJ 6593商業ビル), 我々は、より多くの情報をここで見つけました https://velog.io/@januaryone/BOJ-6593-상범빌딩テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol