poj 2251 3D地牢

2014-11-24 00:36:49 · 作者: · 浏览: 2
#include
#include
using namespace std;
#define N 32

char dun[N][N][N];
int vis[N][N][N];
int c,res;
int L,R,C;

typedef struct dir
{
	int l;
	int r;
	int c;
};
vector towards;
void getTowards()
{
	dir d1,d2,d3,d4,d5,d6;
	d1.l=0;d1.r=-1;d1.c=0;
	d2.l=0;d2.r=0;d2.c=1;
	d3.l=0;d3.r=1;d3.c=0;
	d4.l=0;d4.r=0;d4.c=-1;
	d5.l=-1;d5.r=0;d5.c=0;
	d6.l=1;d6.r=0;d6.c=0;
	towards.push_back(d1);
	towards.push_back(d2);
	towards.push_back(d3);
	towards.push_back(d4);
	towards.push_back(d5);
	towards.push_back(d6);
}
bool comp(dir a,dir b)
{
	if(a.l==b.l&&a.r==b.r&&a.c==b.c)
		return true;
	return false;
}
bool addin(dir a,dir b)
{
	int l,r,c;
	l=a.l+b.l;
	r=a.r+b.r;
	c=a.c+b.c;
	if(l>=0&&l<=L-1&&r>=0&&r<=R-1&&c>=0&&c<=C-1&&dun[l][r][c]!='#'&&!vis[l][r][c])
		return true;
	return false;
}
void dfs(dir s,dir e)
{
	if(comp(s,e))
	{
		res=c;
		return ;
	}
	vis[s.l][s.r][s.c]=1;
	c++;
	for(int i=0;i
>L>>R>>C) { if(L==0&&R==0&&C==0) break; dir s,e; c=0,res=0; for(int i=0;i>dun[i][j][k]; vis[i][j][k]=0; if(dun[i][j][k]=='S') { s.l=i;s.r=j;s.c=k; } if(dun[i][j][k]=='E') { e.l=i;e.r=j;e.c=k; } } dfs(s,e); if(res==0) cout<<"Trapped!"<