马蹄铁题解
作者:
斯嘎尔是胆小鬼
,
2024-07-08 23:28:14
,
所有人可见
,
阅读 10
#include <iostream>
using namespace std;
char map[9][9];
int n, res;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
bool st[9][9];
void dfs(int x, int y, int l, int r)
{
if(l==r && l>0)
{
res=max(l+r,res);
return;
}
for (int i=0; i<4; i++)
{
int xx=x+dx[i], yy=y+dy[i];
if(xx<1 || xx>n || yy<1 || yy>n || st[xx][yy]) continue;
if(r>0 && map[xx][yy]=='(') continue;
st[xx][yy]=true;
if(map[xx][yy]=='(') dfs(xx,yy,l+1, r);
if(map[xx][yy]==')') dfs(xx,yy,l, r+1);
st[xx][yy]=false;
}
return;
}
int main()
{
cin>>n;
for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) cin>>map[i][j];
if(map[1][1]==')') cout<<0<<endl;
else
{
st[1][1]=true;
dfs(1, 1, 1, 0);
cout<<res<<endl;
}
return 0;
}