#include <iostream>
#include <queue>
#include <cstdio>
using namespace std;
const int N = 110;
char a[N][N][N];
int z, x, y;
struct node{
int z, x, y;
int step;
};
node st, ed;
int dic[6][3] = {
{1, 0, 0}, {0, 0, 1}, {-1, 0, 0},
{0, 0, -1}, {0, -1, 0}, {0, 1, 0}
};
void read(){
for(int i = 0; i < z; i ++ ){
for(int j = 0; j < x; j ++ ){
for(int k = 0; k < y; k ++ ){
cin >> a[i][j][k];
if(a[i][j][k] == 'E') ed = {i, j, k};
else if(a[i][j][k] == 'S') st = {i, j, k};
}
}
}
}
int bfs(){
queue<node> qu;
st.step = 0;
qu.push(st);
a[st.z][st.x][st.y] = '#';
while(!qu.empty()){
node now = qu.front();
qu.pop();
for(int i = 0; i < 6; i ++ ){
int zz = now.z + dic[i][0];
int xx = now.x + dic[i][1];
int yy = now.y + dic[i][2];
if(zz == ed.z && xx == ed.x && yy == ed.y) return now.step+1;
if(zz >= 0 && zz < z && xx >= 0 && xx < x && yy >= 0 && yy < y && a[zz][xx][yy] != '#'){
a[zz][xx][yy] = '#';
qu.push({zz, xx, yy, now.step+1});
}
}
}
return -1;
}
/* 调试所用
void print(){
for(int i = 0; i < z; i ++ ){
for(int j = 0; j < x; j ++ ){
for(int k = 0; k < y; k ++ ){
cout << a[i][j][k];
}
}
cout << endl;
}
}
*/
int main(){
while(cin >> z >> x >> y && (z && x && y)){
read();
// print();
int res = bfs();
if(res == -1) cout << "Trapped!" << endl;
else printf("Escaped in %d minute(s).\n", res);
}
return 0;
}
大佬,请问这样赋值为什么出错了
首先你的输出sacnf的地方少了地址符号(&),再者就是使用scanf输入char的时候可以会将多余的行位空格或者回车输入进去(一些比较坑的题目里面会有,比如这题目),你可以尝试在输出你刚刚你的矩阵;
*写一个print函数打印试试
直接把我的代码当做试验,把我的注释加上,在把输入换成
谢谢大佬指点,试了一下,发现输入的东西没有全部读入进去,scanf太坑爹了
一言惊醒梦中人