http://lx.lanqiao.cn/problem.page?gpid=T2814
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=110;
int n,s=999999999;
char g[N][N];
bool bk[N][N];
int bt[4][2]= {{1,0},{-1,0},{0,1},{0,-1}};
void dfs(int x,int y,int st)
{
if(g[x][y]=='B')
{
if(st<s) s=st;
return;
}
for(int i=0; i<4; i++)
{
int nx=x+bt[i][0],ny=y+bt[i][1];
if(nx<0 || nx>=n || ny<0 || ny>=n || bk[nx][ny]!=0) continue;
if(g[x][y]==g[nx][ny]) continue;
bk[nx][ny]=true;
dfs(nx,ny,st+1);
bk[nx][ny]=false;
}
return;
}
int main()
{
cin>>n;
int sx,sy;
getchar();
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
scanf("%c",&g[i][j]);
getchar();
if(g[i][j]=='A')
sx=i,sy=j;
}
}
bk[sx][sy]=true;
dfs(sx,sy,0);
cout<<s<<"\n";
// cout<<"\n";
// for(int i=0; i<n; i++)
// cout<<g[i]<<'\n';
return 0;
}