题目
思路
这道题考查我们的英文阅读理解能力,我们只要算准了起点,以及棋盘究竟是个什么鬼样就可以直接bfs计算。
code:
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
char a[1005][1005];
int n,m,x1,x2,l,r,s=1,w,sum;
int q[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}},b[10005][2];
int bfs()
{
sum++;
int r2=r;
for (int i=l;i<r;i++)
{
for (int j=0;j<8;j++)
{
int dx=b[i][0]+q[j][0],dy=b[i][1]+q[j][1];
if (dx<1||dx>n||dy<1||dy>m||a[dx][dy]=='*') continue;
s++;
a[dx][dy]='*';
if (s==w) return sum;
b[r2][0]=dx;b[r2++][1]=dy;
}
}
l=r;r=r2;
return bfs();
}
int main()
{
cin>>n>>m>>x1>>x2;
w=n*m;
for (int i=1;i<=m;i++)
{
for (int j=1;j<=n;j++)
{
cin>>a[i][j];
if (a[i][j]=='*') s++;
}
}
int t=x2;
x2=x1;
x1=m-t+1;
swap(n,m);//真·恶心
a[x1][x2]='*';
b[r][0]=x1;
b[r++][1]=x2;
cout<<bfs();
return 0;
}