G - Dungeon MasterBFS+填路
来源:互联网 发布:管家婆普及版数据恢复 编辑:程序博客网 时间:2024/06/05 16:16
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
struct node
{
int x,y,z;
};
queue <node> qq;
char map[35][35][35];
int track[35][35][35];
int l,r,c;
int start[1][5];
int end[1][5];
int main()
{
void bfs();
while(scanf("%d%d%d",&l,&r,&c)!=EOF)
{
while(!qq.empty()) //之前没这个导致WA
qq.pop();
getchar();
memset(track,0,sizeof(track));
memset(map,0,sizeof(map));
if (!l && !r && !c) break;
int i,j,k;
for (i=1;i<=l;i++)
{
for (j=1;j<=r;j++)
{
for (k=1;k<=c;k++)
{
scanf("%c",&map[i][j][k]);
if (map[i][j][k]=='S')
{
start[0][1]=i;
start[0][2]=j;
start[0][3]=k;
}
if (map[i][j][k]=='E')
{
end[0][1]=i;
end[0][2]=j;
end[0][3]=k;
}
}
getchar();
}
if (i<l) getchar();
}
node a;
a.z=start[0][1];
a.x=start[0][2];
a.y=start[0][3];
qq.push(a);
bfs();
}
return 0;
}
int legal(int zz, int rr,int cc)
{
int ok=0;
if ( rr>=1 && rr<=r && cc>=1 && cc<=c && zz>=1 && zz<=l ) ok=1;
int ok1=0;
if ( map[zz][rr][cc]=='.'|| map[zz][rr][cc]=='E' ) ok1=1;
if (ok1&&ok ) return 1;
return 0;
}
void bfs()
{
int ok=0;
while ( !qq.empty() )
{
node point=qq.front();
qq.pop();
if (point.z==end[0][1] && point.x==end[0][2] && point.y==end[0][3] )
{ok=1; break; }
map[point.z][point.x][point.y]='#';
if ( legal(point.z,point.x-1,point.y) )
{
point.x--;
qq.push(point);map[point.z][point.x][point.y]='#'; //之前没这个导致TLE
point.x++;
track[point.z][point.x-1][point.y]=track[point.z][point.x][point.y]+1;
}
if ( legal(point.z,point.x+1,point.y) )
{
point.x++;
qq.push(point);map[point.z][point.x][point.y]='#';//之前没这个导致TLE
point.x--;
track[point.z][point.x+1][point.y]=track[point.z][point.x][point.y]+1;
}
if ( legal(point.z,point.x,point.y-1) )
{
point.y--;
qq.push(point); map[point.z][point.x][point.y]='#';//之前没这个导致TLE
point.y++;
track[point.z][point.x][point.y-1]=track[point.z][point.x][point.y]+1;
}
if ( legal(point.z,point.x,point.y+1) )
{
point.y++;
qq.push(point); map[point.z][point.x][point.y]='#';
point.y--;
track[point.z][point.x][point.y+1]=track[point.z][point.x][point.y]+1;
}
if ( legal(point.z+1,point.x,point.y) )
{
point.z++;
qq.push(point);map[point.z][point.x][point.y]='#';
point.z--;
track[point.z+1][point.x][point.y]=track[point.z][point.x][point.y]+1;
}
if ( legal(point.z-1,point.x,point.y) )
{
point.z--;
qq.push(point); map[point.z][point.x][point.y]='#';
point.z++;
track[point.z-1][point.x][point.y]=track[point.z][point.x][point.y]+1;
}
}
if (ok) printf("Escaped in %d minute(s).\n",track[end[0][1]][end[0][2]][end[0][3]]);
else
printf("Trapped!\n");
return ;
}
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
struct node
{
int x,y,z;
};
queue <node> qq;
char map[35][35][35];
int track[35][35][35];
int l,r,c;
int start[1][5];
int end[1][5];
int main()
{
void bfs();
while(scanf("%d%d%d",&l,&r,&c)!=EOF)
{
while(!qq.empty()) //之前没这个导致WA
qq.pop();
getchar();
memset(track,0,sizeof(track));
memset(map,0,sizeof(map));
if (!l && !r && !c) break;
int i,j,k;
for (i=1;i<=l;i++)
{
for (j=1;j<=r;j++)
{
for (k=1;k<=c;k++)
{
scanf("%c",&map[i][j][k]);
if (map[i][j][k]=='S')
{
start[0][1]=i;
start[0][2]=j;
start[0][3]=k;
}
if (map[i][j][k]=='E')
{
end[0][1]=i;
end[0][2]=j;
end[0][3]=k;
}
}
getchar();
}
if (i<l) getchar();
}
node a;
a.z=start[0][1];
a.x=start[0][2];
a.y=start[0][3];
qq.push(a);
bfs();
}
return 0;
}
int legal(int zz, int rr,int cc)
{
int ok=0;
if ( rr>=1 && rr<=r && cc>=1 && cc<=c && zz>=1 && zz<=l ) ok=1;
int ok1=0;
if ( map[zz][rr][cc]=='.'|| map[zz][rr][cc]=='E' ) ok1=1;
if (ok1&&ok ) return 1;
return 0;
}
void bfs()
{
int ok=0;
while ( !qq.empty() )
{
node point=qq.front();
qq.pop();
if (point.z==end[0][1] && point.x==end[0][2] && point.y==end[0][3] )
{ok=1; break; }
map[point.z][point.x][point.y]='#';
if ( legal(point.z,point.x-1,point.y) )
{
point.x--;
qq.push(point);map[point.z][point.x][point.y]='#'; //之前没这个导致TLE
point.x++;
track[point.z][point.x-1][point.y]=track[point.z][point.x][point.y]+1;
}
if ( legal(point.z,point.x+1,point.y) )
{
point.x++;
qq.push(point);map[point.z][point.x][point.y]='#';//之前没这个导致TLE
point.x--;
track[point.z][point.x+1][point.y]=track[point.z][point.x][point.y]+1;
}
if ( legal(point.z,point.x,point.y-1) )
{
point.y--;
qq.push(point); map[point.z][point.x][point.y]='#';//之前没这个导致TLE
point.y++;
track[point.z][point.x][point.y-1]=track[point.z][point.x][point.y]+1;
}
if ( legal(point.z,point.x,point.y+1) )
{
point.y++;
qq.push(point); map[point.z][point.x][point.y]='#';
point.y--;
track[point.z][point.x][point.y+1]=track[point.z][point.x][point.y]+1;
}
if ( legal(point.z+1,point.x,point.y) )
{
point.z++;
qq.push(point);map[point.z][point.x][point.y]='#';
point.z--;
track[point.z+1][point.x][point.y]=track[point.z][point.x][point.y]+1;
}
if ( legal(point.z-1,point.x,point.y) )
{
point.z--;
qq.push(point); map[point.z][point.x][point.y]='#';
point.z++;
track[point.z-1][point.x][point.y]=track[point.z][point.x][point.y]+1;
}
}
if (ok) printf("Escaped in %d minute(s).\n",track[end[0][1]][end[0][2]][end[0][3]]);
else
printf("Trapped!\n");
return ;
}
0 0
- G - Dungeon MasterBFS+填路
- Vitamio 填坑之路
- webpack填坑之路
- C++填坑之路
- Vue填坑之路
- Git填坑之路
- Jetty 填坑之路
- 【ZOJ】3942 Substring Counting【浙江ACM2016省赛G题】【填坑】
- Elasticsearch-2.3.x填坑之路
- Android OEM Fragment 填坑之路
- mac 重新安装系统 填坑之路
- 安卓开发-填坑之路
- 开始2017挖坑填坑之路
- Elasticsearch-2.3.x填坑之路
- html5plus的填坑之路
- 110. Dungeon
- sgu110:Dungeon
- Dungeon Game
- SharedPreferences 保存字符串数组
- 规则 3.1:对象命名汇总表(3)
- Find problem in eXtremeDB
- E - Children of the Candy Corn`特别DFS+BFS+DFS陷阱
- F - Catch That Cow-BFS-只计次不求路径
- G - Dungeon MasterBFS+填路
- java IO详解看完你就懂了耐心点。
- Node入门之一
- UITableableview上拉下拉刷新
- 迷宫BFS+递归回溯找爹打印路径
- hihoCoder 二分·二分查找之k小数
- HDU 4114 Disney's FastPass(状压dp)
- 迷宫DFS
- 路由事件初级案例