UVA 532--Dungeon Master
2017-12-14 15:55
323 查看
题意:给你一个空间图形,空间图形由 ‘#‘ ‘S‘ ’E‘ ‘.’ 等元素组成求能否从S到达E。能到达输出最小步数。
分析:bfs,由于空间图形较小直接bfs模拟搜索即可。
#include<bits/stdc++.h>
using namespace std;
const int Max=50;
int n,m,r;
char mp[Max][Max][Max];
int flag[Max][Max][Max];
int dx[]={0,-1,0,1,0,0};
int dy[]={0,0,1,0,-1,0};
int dz[]={-1,0,0,0,0,1};
struct node
{
int x;
int y;
int z;
};
node t,t1;
queue<node>check;
void bfs()
{
while(check.empty()==0)
{
t=check.front();
check.pop();
for(int i=0;i<6;i++)
{
int xx=t.x+dz[i];
int yy=t.y+dx[i];
int zz=t.z+dy[i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&zz>=1&&zz<=r&&mp[xx][yy][zz]!='#'&&flag[xx][yy][zz]==-1)
{
t1.x=xx;
t1.y=yy;
t1.z=zz;
check.push(t1);
flag[xx][yy][zz]=flag[t.x][t.y][t.z]+1;
}
}
}
}
int main()
{
while(cin>>n>>m>>r)
{
if(n==0&&m==0&&r==0)break;
memset(flag,-1,sizeof(flag));
while(check.empty()==0)
{
check.pop();
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
for(int k=1;k<=r;k++)
{
cin>>mp[i][j][k];
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
for(int k=1;k<=r;k++)
{
if(mp[i][j][k]=='S')
{
t.x=i;
t.y=j;
t.z=k;
flag[i][j][k]=0;
check.push(t);
bfs();
}
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
for(int k=1;k<=r;k++)
{
if(mp[i][j][k]=='E'&&flag[i][j][k]==-1)
{
cout<<"Trapped!"<<endl;
}
else if(mp[i][j][k]=='E'&&flag[i][j][k]!=-1)
{
cout<<"Escaped in "<<flag[i][j][k]<<" minute(s)."<<endl;
}
}
}
}
}
return 0;
}
分析:bfs,由于空间图形较小直接bfs模拟搜索即可。
#include<bits/stdc++.h>
using namespace std;
const int Max=50;
int n,m,r;
char mp[Max][Max][Max];
int flag[Max][Max][Max];
int dx[]={0,-1,0,1,0,0};
int dy[]={0,0,1,0,-1,0};
int dz[]={-1,0,0,0,0,1};
struct node
{
int x;
int y;
int z;
};
node t,t1;
queue<node>check;
void bfs()
{
while(check.empty()==0)
{
t=check.front();
check.pop();
for(int i=0;i<6;i++)
{
int xx=t.x+dz[i];
int yy=t.y+dx[i];
int zz=t.z+dy[i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&zz>=1&&zz<=r&&mp[xx][yy][zz]!='#'&&flag[xx][yy][zz]==-1)
{
t1.x=xx;
t1.y=yy;
t1.z=zz;
check.push(t1);
flag[xx][yy][zz]=flag[t.x][t.y][t.z]+1;
}
}
}
}
int main()
{
while(cin>>n>>m>>r)
{
if(n==0&&m==0&&r==0)break;
memset(flag,-1,sizeof(flag));
while(check.empty()==0)
{
check.pop();
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
for(int k=1;k<=r;k++)
{
cin>>mp[i][j][k];
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
for(int k=1;k<=r;k++)
{
if(mp[i][j][k]=='S')
{
t.x=i;
t.y=j;
t.z=k;
flag[i][j][k]=0;
check.push(t);
bfs();
}
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
for(int k=1;k<=r;k++)
{
if(mp[i][j][k]=='E'&&flag[i][j][k]==-1)
{
cout<<"Trapped!"<<endl;
}
else if(mp[i][j][k]=='E'&&flag[i][j][k]!=-1)
{
cout<<"Escaped in "<<flag[i][j][k]<<" minute(s)."<<endl;
}
}
}
}
}
return 0;
}
相关文章推荐
- uva 532 Dungeon Master
- UVA 532 - Dungeon Master
- UVa532 Dungeon Master 三维迷宫
- UVA 532 & POJ 2251 Dungeon Master (BFS)
- UVA532 POJ2251 ZOJ1940 Dungeon Master
- UVA 532 - Dungeon Master
- POJ 2251 Dungeon Master /UVA 532 Dungeon Master / ZOJ 1940 Dungeon Master(广度优先搜索)
- UVA 532 - Dungeon Master
- [uva-532]Dungeon Master (BFS)
- UVA 532 - Dungeon Master
- UVA 532 - Dungeon Master
- uva 532 - Dungeon Master
- UVa 532 - Dungeon Master
- uva 532 - Dungeon Master
- UVa 532 Dungeon Master( BFS )
- UVA - 532 Dungeon Master
- UVA532 - Dungeon Master(裸BFS)
- uva 532 - Dungeon Master
- UVa 532 Dungeon Master
- UVA 532-Dungeon Master