因为都是bfs就一起发了
1:P2360地下城主
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
const int Maxn=30+10;
int l,r,c;
int sx=0,sy=0,sz=0;
string s[Maxn][Maxn];
bool vis[Maxn][Maxn][Maxn];
int dx[]={0,1,0,-1,0,0};
int dy[]={1,0,-1,0,0,0};
int dz[]={0,0,0,0,1,-1};
struct Stu
{
int x,y,z,cnt;
}a[Maxn*Maxn*Maxn];
void bfs()
{
int h=1,t=2;
a[1].x=sx;a[1].y=sy;a[1].z=sz;
a[1].cnt=0;
vis[sx][sy][sz]=true;
while(h<t)
{
if(s[a[h].x][a[h].y][a[h].z]=='E')
{
cout<<"Escaped in "<<a[h].cnt<<" minute(s)."<<endl;
return ;
}
for(int i=0;i<6;i++)
{
int nx=a[h].x+dx[i],ny=a[h].y+dy[i],nz=a[h].z+dz[i];
if(nx>=1&&nx<=r&&ny>=1&&ny<=c&&nz>=1&&nz<=l)
{
if(vis[nx][ny][nz]==false&&s[nx][ny][nz]!='#')
{
vis[nx][ny][nz]=true;
a[t].x=nx;a[t].y=ny;a[t].z=nz;
a[t].cnt=a[h].cnt+1;
t++;
}
}
}
h++;
}
cout<<"Trapped!"<<endl;
}
int main()
{
cin>>l>>r>>c;
for(int i=1;i<=l;i++)
{
for(int j=1;j<=r;j++)
{
for(int k=1;k<=c;k++)
{
cin>>s[i][j][k];
if(s[i][j][k]=='S') sx=i,sy=j,sz=k;
}
}
}
bfs();
return 0;
}
2:P2298Mzc和男家丁的游戏
玄学RE
#include <iostream>
using namespace std;
const int Maxn=2000+10;
int n,m;
int sx=0,sy=0;
string s[Maxn];
bool vis[Maxn][Maxn];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
struct Stu
{
int x,y,cnt;
}a[Maxn*Maxn];
void bfs()
{
int h=1,t=2;
vis[sx][sy]=true;
a[1].x=sx;a[1].y=sy;
a[1].cnt=0;
while(h<t)
{
if(s[a[h].x][a[h].y]=='d')
{
cout<<a[h].cnt<<endl;
return ;
}
for(int i=0;i<4;i++)
{
int nx=a[h].x+dx[i],ny=a[h].y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&s[nx][ny]!='#')
{
if(vis[nx][ny]==false)
{
vis[nx][ny]=true;
a[t].x=nx; a[t].y=ny;
a[t].cnt=a[h].cnt+1;
t++;
}
}
}
h++;
}
cout<<"No Way!"<<endl;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>s[i][j];
if(s[i][j]=='m') sx=i,sy=j;
}
}
bfs();
return 0;
}
QaQ