90ptsWA,#7本来输出6,我的答案是4,有没有知道为什么或者可以提供hack的谢谢QAQ
#include<bits/stdc++.h>
using namespace std;
int n,xs,ys,a[101][101],ans;
bool used[101][101];
void dfs(int x,int y,int sum)
{
//cout<<x<<" "<<y<<" "<<sum<<endl;
ans=max(ans,sum);
bool flag1=1,flag2=1;
for(int i=x+1,j=x-1;i<=n||j>=1;i++,j--)
{
if(i<=n&&flag1&&!used[i][y]&&!a[i][y]&&i!=x+1)
{
used[i][y]=1;
dfs(i,y,i-x+sum);
used[i][y]=0;
flag1=0;
}
if(j>=1&&flag2&&!used[j][y]&&!a[j][y]&&j!=x-1)
{
used[j][y]=1;
dfs(j,y,x-j+sum);
used[j][y]=0;
flag2=0;
}
if(a[i][y]==0)
{
flag1=0;
}
if(a[j][y]==0)
{
flag2=0;
}
}
flag1=1,flag2=1;
for(int i=y+1,j=y-1;i<=n||j>=1;i++,j--)
{
if(i<=n&&flag1&&!used[x][i]&&!a[x][i]&&i!=y+1)
{
used[x][i]=1;
dfs(x,i,i-y+sum);
used[x][i]=0;
flag1=0;
}
if(j>=1&&flag2&&!used[x][j]&&!a[x][j]&&j!=y-1)
{
used[x][j]=1;
dfs(x,j,y-j+sum);
used[x][j]=0;
flag1=0;
}
if(a[x][i]==0)
{
flag1=0;
}
if(a[x][j]==0)
{
flag2=0;
}
}
}
int main()
{
cin>>n>>xs>>ys;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
used[xs][ys]=1;
dfs(xs,ys,0);
cout<<ans;
return 0;
}