| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
过了各种样例还WA的过来看看千万不要在使用了队列pop的时候还引用呀!!我就是这样wa了无数遍。
附AC码:
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
const int MAXN = 50;
char mp[MAXN][MAXN][MAXN];
bool vis[MAXN][MAXN][MAXN];
int l, r, c;
int dz[]={-1,1,0,0,0,0};
int dx[]={0,0,0,0,-1,1};
int dy[]={0,0,-1,1,0,0};
struct Node{
int z, x, y, dis;
Node(int a, int b, int c, int d): z(a), x(b), y(c), dis(d){}
};
int main() {
ios_base::sync_with_stdio(0);
while (cin >> l >> r >> c && l + r + c)
{
int ans = -1;
memset(vis, 0, sizeof vis);
queue<Node> q;
for (int i = 0; i < l; ++i)
for (int j = 0; j < r; ++j)
for (int k = 0; k < c; ++k)
{
//cout << i << j << k << endl;
cin >> mp[i][j][k];
if (mp[i][j][k] == 'S')
{
q.push(Node(i, j, k, 0));
vis[i][j][k] = 1;
}
}
while (!q.empty())
{
Node e = q.front(); q.pop();
for (int i = 0; i < 6; ++i)
{
int nz = e.z + dz[i], nx = e.x + dx[i], ny = e.y + dy[i], ndis = e.dis + 1;
if (0 <= nz && nz < l && 0 <= nx && nx < r && 0 <= ny && ny < c && mp[nz][nx][ny] != '#' && !vis[nz][nx][ny])
{
if (mp[nz][nx][ny] == 'E')
ans = ndis;
vis[nz][nx][ny] = 1;
q.push(Node(nz, nx, ny, ndis));
}
}
}
if (ans == -1)
cout << "Trapped!\n";
else cout << "Escaped in " << ans << " minute(s).\n";
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator