代码
#include<iostream>
#include<cstdio>
using namespace std;
int n,s,s1,s2,s3,s4,s5;
char a[1010][1010];
int dx[5]={0,0,1,0,-1};
int dy[5]={0,-1,0,1,0};
int qx[5]={0,1,1,-1,-1};
int qy[5]={0,-1,1,1,-1};
int dfs(int x,int y,int k)
{
for(int i=1;i<=4;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
int xxx=x+qx[i];
int yyy=y+qy[i];
if(xx>0&&xx<=n&&yy>0&&yy<=n&&a[xx][yy]!='*')
{
if(a[x][y]=='A')
{
dfs(xx,yy,k+1);
}
else if(a[x][y]=='B')
{
for(int j=1;j<=2;j++)
{
if(a[xx][yy]!='*')
{
dfs(xx,yy,k+1);
}
}
}
else if(a[x][y]=='C')
{
if(xxx>0&&xxx<=n&&yyy>0&&yyy<=n&&a[xxx][yyy]!='*')
{
dfs(xxx,yyy,k+2);
}
}
else if(xx==n&&yy==n)
{
return k;
}
}
else if(a[xx][yy]=='*')
{
return 0;
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
a[1][1]='*';
a[1][n]='*';
a[n][1]='*';
s=dfs(1,1,1);
s1=dfs(1,n,1);
s2=dfs(n,1,1);
s3=max(s,s1);
s4=max(s2,s3);
if(s4==0||s4==8)
{
cout<<"No answer";
}
else
{
cout<<s4;
}
return 0;
}