CDOJ 方老师与迷宫
2014-05-17 16:39
609 查看
二维变三维了。
#include<stdio.h>
#include<string.h>
typedef struct point
{
int x,y,z;
}point;
point in,out,que[30000];
int L,R,C;
int dx[]={0,0,0,0,-1,1};
int dy[]={0,0,-1,1,0,0};
int dz[]={-1,1,0,0,0,0};
char box[31][31][31];
int vis[31][31][31],dis[30000]={0};
bool is_in(int x,int y,int z)
{
if(x>=0&&x<L&&y>=0&&y<R&&z>=0&&z<C)
return true;
else return false;
}
int bfs()
{ int fron=1,rear=1,ans=0;
que[rear].x=in.x,que[rear].y=in.y,que[rear].z=in.z;
rear++;
while(fron<rear)
{
point now;
int i;
now.x=que[fron].x,now.y=que[fron].y,now.z=que[fron].z;
if(now.x==out.x&&now.y==out.y&&now.z==out.z) return fron;
for(i=0;i<6;i++)
{
point tmp;
tmp.x=now.x+dx[i],tmp.y=now.y+dy[i],tmp.z=now.z+dz[i];//扩张出的新一层节点
if(!is_in(tmp.x,tmp.y,tmp.z)) continue;
if(!vis[tmp.x][tmp.y][tmp.z]&&box[tmp.x][tmp.y][tmp.z]!='#')//满足条件则入队
{
vis[tmp.x][tmp.y][tmp.z]=1;
dis[rear]=dis[fron]+1;
que[rear].x=tmp.x,que[rear].y=tmp.y,que[rear].z=tmp.z;
rear++;
}
}
fron++;
}
return 0;
}
int main()
{
while(scanf("%d%d%d",&L,&R,&C)!=EOF)
{
if(L==0) break;
int i,j,k;
char s[31];
memset(vis,0,sizeof(vis));
for(i=0;i<L;i++)
for(j=0;j<R;j++)
{
scanf("%s",s);
for(k=0;k<C;k++)
{ char ch=s[k];
box[i][j][k]=ch;
if(ch=='S') {in.x=i;in.y=j;in.z=k;vis[i][j][k]=1;}
if(ch=='E') {out.x=i;out.y=j;out.z=k;}
}
}
int ans=bfs();
if(ans==0) printf("Trapped!\n");
else printf("Escaped in %d minute(s).\n",dis[ans]);
}
return 0;
}
#include<stdio.h>
#include<string.h>
typedef struct point
{
int x,y,z;
}point;
point in,out,que[30000];
int L,R,C;
int dx[]={0,0,0,0,-1,1};
int dy[]={0,0,-1,1,0,0};
int dz[]={-1,1,0,0,0,0};
char box[31][31][31];
int vis[31][31][31],dis[30000]={0};
bool is_in(int x,int y,int z)
{
if(x>=0&&x<L&&y>=0&&y<R&&z>=0&&z<C)
return true;
else return false;
}
int bfs()
{ int fron=1,rear=1,ans=0;
que[rear].x=in.x,que[rear].y=in.y,que[rear].z=in.z;
rear++;
while(fron<rear)
{
point now;
int i;
now.x=que[fron].x,now.y=que[fron].y,now.z=que[fron].z;
if(now.x==out.x&&now.y==out.y&&now.z==out.z) return fron;
for(i=0;i<6;i++)
{
point tmp;
tmp.x=now.x+dx[i],tmp.y=now.y+dy[i],tmp.z=now.z+dz[i];//扩张出的新一层节点
if(!is_in(tmp.x,tmp.y,tmp.z)) continue;
if(!vis[tmp.x][tmp.y][tmp.z]&&box[tmp.x][tmp.y][tmp.z]!='#')//满足条件则入队
{
vis[tmp.x][tmp.y][tmp.z]=1;
dis[rear]=dis[fron]+1;
que[rear].x=tmp.x,que[rear].y=tmp.y,que[rear].z=tmp.z;
rear++;
}
}
fron++;
}
return 0;
}
int main()
{
while(scanf("%d%d%d",&L,&R,&C)!=EOF)
{
if(L==0) break;
int i,j,k;
char s[31];
memset(vis,0,sizeof(vis));
for(i=0;i<L;i++)
for(j=0;j<R;j++)
{
scanf("%s",s);
for(k=0;k<C;k++)
{ char ch=s[k];
box[i][j][k]=ch;
if(ch=='S') {in.x=i;in.y=j;in.z=k;vis[i][j][k]=1;}
if(ch=='E') {out.x=i;out.y=j;out.z=k;}
}
}
int ans=bfs();
if(ans==0) printf("Trapped!\n");
else printf("Escaped in %d minute(s).\n",dis[ans]);
}
return 0;
}
相关文章推荐
- CDOJ 885 方老师买表
- UESTC_方老师买表 CDOJ 885
- cdoj 851 方老师与素数 bfs
- UESTC 方老师与迷宫
- cdoj1088-王之迷宫 (三维迷宫最短路径)【BFS】
- CDOJ (UESTC) 851 方老师与素数(bfs)
- cdoj 847 方老师与栈 火车进出战问题
- cdoj915-方老师的分身 II (长度不小于k的最短路)【spfa】
- CDOJ-#851 方老师与素数(BFS)
- uestc 方老师与迷宫(三维迷宫)
- UESTC_方老师分身 I CDOJ 914
- CDOJ 1088 王之迷宫 BFS
- cdoj914-方老师分身 I 【dijkstra】
- 2014 UESTC Training for Search Algorithm Problem F 方老师与迷宫
- uva 10972 RevolC FaeLoN cdoj 方老师和农场
- hdu 1728 逃离迷宫
- 数据结构--用栈求解迷宫问题(非最优解)
- 1792:迷宫
- 4-1 迷宫
- bfs 迷宫输出最短路径