POJ2251 Dungeon Master
2016-03-06 23:31
218 查看
简单的搜索,只是多了一个维度
#include<stdio.h>
#include<string.h>
int l,r,c;
int sx,sy,sz;
char a[31][31][31];
int book[31][31][31];
int xx[6]={1,-1,0,0,0,0};
int yy[6]={0,0,1,-1,0,0};
int zz[6]={0,0,0,0,1,-1};
struct note
{
int x,y,z;
int s;
}que[100000];
void bfs()
{
int head=1,tail=1;
que[tail].x=sx;
que[tail].y=sy;
que[tail].z=sz;
tail++;
int i,j;
int tx,ty,tz;
int flag=0;
while(head<tail)
{
for(i=0;i<6;i++)
{
tx=que[head].x+xx[i];
ty=que[head].y+yy[i];
tz=que[head].z+zz[i];
if(tx<0||ty<0||tz<0||tx>=l||ty>=r||tz>=c||book[tx][ty][tz]||a[tx][ty][tz]=='#')
continue;
book[tx][ty][tz]=1;
que[tail].x=tx;
que[tail].y=ty;
que[tail].z=tz;
que[tail].s=que[head].s+1;
if(a[tx][ty][tz]=='E')
{
printf("Escaped in %d minute(s).\n",que[tail].s);
return;
}
tail++;
}
head++;
}
printf("Trapped!\n");
return;
}
int main()
{
//freopen("t.txt","r",stdin);
while(scanf("%d%d%d",&l,&r,&c)&&(l!=0||r!=0||c!=0))
{
getchar();
memset(a,'\0',sizeof(a));
memset(book,0,sizeof(book));
memset(que,0,sizeof(que));
int i,j,k;
for(i=0;i<l;i++,getchar())
{
for(j=0;j<r;j++,getchar())
{
for(k=0;k<c;k++)
{
scanf("%c",&a[i][j][k]);
if(a[i][j][k]=='S')
{
sx=i;
sy=j;
sz=k;
}
}
}
}
bfs();
}
return 0;
}
#include<stdio.h>
#include<string.h>
int l,r,c;
int sx,sy,sz;
char a[31][31][31];
int book[31][31][31];
int xx[6]={1,-1,0,0,0,0};
int yy[6]={0,0,1,-1,0,0};
int zz[6]={0,0,0,0,1,-1};
struct note
{
int x,y,z;
int s;
}que[100000];
void bfs()
{
int head=1,tail=1;
que[tail].x=sx;
que[tail].y=sy;
que[tail].z=sz;
tail++;
int i,j;
int tx,ty,tz;
int flag=0;
while(head<tail)
{
for(i=0;i<6;i++)
{
tx=que[head].x+xx[i];
ty=que[head].y+yy[i];
tz=que[head].z+zz[i];
if(tx<0||ty<0||tz<0||tx>=l||ty>=r||tz>=c||book[tx][ty][tz]||a[tx][ty][tz]=='#')
continue;
book[tx][ty][tz]=1;
que[tail].x=tx;
que[tail].y=ty;
que[tail].z=tz;
que[tail].s=que[head].s+1;
if(a[tx][ty][tz]=='E')
{
printf("Escaped in %d minute(s).\n",que[tail].s);
return;
}
tail++;
}
head++;
}
printf("Trapped!\n");
return;
}
int main()
{
//freopen("t.txt","r",stdin);
while(scanf("%d%d%d",&l,&r,&c)&&(l!=0||r!=0||c!=0))
{
getchar();
memset(a,'\0',sizeof(a));
memset(book,0,sizeof(book));
memset(que,0,sizeof(que));
int i,j,k;
for(i=0;i<l;i++,getchar())
{
for(j=0;j<r;j++,getchar())
{
for(k=0;k<c;k++)
{
scanf("%c",&a[i][j][k]);
if(a[i][j][k]=='S')
{
sx=i;
sy=j;
sz=k;
}
}
}
}
bfs();
}
return 0;
}
相关文章推荐
- 用REST获得openvswitch ovsdb的信息
- 局域网无法访问vmware虚拟机WEB服务器解决办法
- BZOJ 1087 SCOI 互不侵犯 状态DP
- 电商系统Broadleaf文档翻译(三) - 应用架构模块视图application architecture module view
- c++中的双向链表写法,主要实现(增删查改,链表逆置,构造函数,运算符重载,等)
- 创建控制器的三种方法
- fseek效率
- Android控件架构与view,viewgroup的测量和绘制
- 设计模式之代理模式(Proxy)
- 跨平台C++服务器程序开发 (3)Linux文件描述符
- 函数表达式和闭包
- UVA11987Almost Union-Find(并查集删除节点)
- Develop -- Training(十一) -- 通过NFC共享文件
- 【慕课笔记】3-1 RandomAccessFile基本操作
- 7天 搞定 ASP.NET MVC - 第7天
- 合理的布局,绚丽的样式,谈谈Winform程序的界面设计
- C/C++宏的使用总结
- 最小生成树 Kruskal算法
- 单CPU环境中如何实现多进程并行工作?
- UltraEdit23 sh文件 (shell脚本)着色