显然爆搜,虽然一开始以为会超时。
注意清除走过的点的标记,之前这里没处理好样例少1就手动+1结果16分数据太水了
然后就是代码。
int mx[4]={1,0,-1,0};
int my[4]={0,1,0,-1};
#define N 200
int ap[N][N],ved[N][N],n,m;
int dfs(int x,int y,int t)
{
int _=x+mx[t],__=y+my[t];
if(ved[_][__])
return 1;
ved[x][y]=1;
int r=1;
if(!ap[_][__])
{
fr(i,0,3)
{
if(ap[x+mx[i]][y+my[i]]&&(!ved[x+mx[i]][y+my[i]]))
r=max(r,dfs(x+mx[i],y+my[i],i)+1);
}
}
else
r=dfs(_,__,t)+1;
ved[x][y]=0;
return r;
}
int main()
{
n=read();
m=read();
fr(i,1,n)
fr(j,1,n)
ap[i][j]=1;
fr(i,1,m)
{
char c=getchar();
while(c<'A')
c=getchar();
ap[c-'A'+1][read()]=0;
}
if(ap[1][1])
printf("%d\n",max(dfs(1,1,0),dfs(1,1,1)));
else
printf("0\n");
return 0;
}
对了,luogu上有些getchar用不好的说必须cin,别理就好