代码来源:DeathYmz
AC的C++语言程序如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int N=10;
int n,ans;
char board[N][N];
int vis[N][N];
void f(int i,int j,int v)
{
vis[i][j]+=v;
for(int k=i+1;k<n;k++)
{
if(board[k][j]=='X') break;
else vis[k][j]+=v;//右
}
for(int k=i-1;k>=0;k--)
{
if(board[k][j]=='X') break;
else vis[k][j]+=v;//左
}
for(int k=j-1;k>=0;k--)
{
if(board[i][k]=='X') break;
else vis[i][k]+=v;//上
}
for(int k=j+1;k<n;k++)
{
if(board[i][k]=='X') break;
else vis[i][k]+=v;//下
}
}
void search(int row,int col,int num)
{
if(col==n)
row++,col=0;
if(row==n)
{
ans=max(ans,num);
return;
}
if(board[row][col]=='.'&&vis[row][col]<=0)
{
f(row,col,1);
//cout<<"("<<row<<","<<col<<")"<<endl;
search(row,col+1,num+1);
f(row,col,-1);//返回之前状态,
}
search(row,col+1,num);//不放
}
int main()
{
while(scanf("%d",&n)!=EOF&&n)
{
memset(vis,0,sizeof(vis));
ans=0;
for(int i=0;i<n;i++)
scanf("%s",&board[i]);
search(0,0,0);
printf("%d\n",ans);
}
return 0;
}