题目:P8693 [蓝桥杯 2019 国 AC] 大胖子走迷宫
代码:
//t3
#include<bits/stdtr1c++.h>
using namespace std;
int n,k,mp[400][400][3],ans;
struct node
{
int x,y,state,time;
};
queue<node> q;
string s;
int vis[400][400];
int check1(int x,int y)
{
for(int i=x-1;i<=x+1;i++)
for(int j=y-1;j<=y+1;j++)
if(!mp[i][j][2]) return 0;
return 1;
}
int check2(int x,int y)
{
for(int i=x-2;i<=x+2;i++)
for(int j=y-2;j<=y+2;j++)
if(!mp[i][j][2])return 0;
return 1;
}
void bfs()
{
int x1[5]={0,1,-1,0,0},y1[5]={0,0,0,1,-1};
node e;
e.state=0;e.time=0;
e.x=3;e.y=3;
q.push(e);
vis[3][3]=1;
do
{
node p=q.front();
q.pop();
if(p.x==n-2&&p.y==n-2)
{
ans=p.time;
return;
}
for(int i=0;i<=4;i++)
{
node o;
int x2=p.x+x1[i],y2=p.y+y1[i];
o.time=p.time+1;
o.x=x2;o.y=y2;
if(o.time<k)o.state=0;
if(o.time>=k)o.state=1;
if(o.time>=k*2)o.state=2;
if(vis[x2][y2]==0&&mp[x2][y2][p.state])
{
vis[x2][y2]=1;
q.push(o);
}
?
{
?
if(o.time>k*2)continue;
q.push(o);
}
}
}while(!q.empty());
}
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>s;
for(int i=1;i<=n;i++)
{
cin>>s;
for(int j=1;j<=n;j++)
{
if(s[j-1]=='+')mp[i][j][2]=1;
if(s[j-1]=='*')mp[i][j][2]=0;
}
}
for(int i=2;i<=n-1;i++)
for(int j=2;j<=n-1;j++)
mp[i][j][1]=check1(i,j);
for(int i=3;i<=n-2;i++)
for(int j=3;j<=n-2;j++)
mp[i][j][0]=check2(i,j);
bfs();
cout<<ans;
}
}
上面有两个有?的地方的代码不会(没弄清老师这里的思路),有巨佬帮忙补全吗?