以前本科的时候打死没有写出来,现在可以了。。。。
#include<iostream>
#include<string>
using namespace std;
string map[5];
int n;
bool CanPut(int i,int j)
{
for(int k=i-1;k>=0;k--)
{
if(map[k][j]=='#')
return false;
else if(map[k][j]=='X')
break;
}
for(int k=i+1;k<n;k++)
{
if(map[k][j]=='#')
return false;
else if(map[k][j]=='X')
break;
}
for(int k=j-1;k>=0;k--)
{
if(map[i][k]=='#')
return false;
else if(map[i][k]=='X')
break;
}
for(int k=j+1;k<n;k++)
{
if(map[i][k]=='#')
return false;
else if(map[i][k]=='X')
break;
}
return true;
}
int maxcnt,tempcnt;
bool flag[5][5];
void Slove(int ix,int jx)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(map[i][j]=='.')
{
//if(flag[i][j]==false)
//{
// flag[i][j]=true;
if( CanPut(i,j))
{
map[i][j]='#';
tempcnt++;
if(tempcnt>maxcnt)
{
maxcnt=tempcnt;
// cout<<maxcnt<<endl;
// for(int ii=0;ii<n;ii++)
// {
// cout<<map[ii]<<endl;
// }
// cout<<endl;
}
// flag[i][j]=true;
Slove(i,j);
tempcnt--;
map[i][j]='.';
}
// flag[i][j]=false;
//}
}
}
}
}
int main()
{
while(cin>>n && n)
{
maxcnt=0,tempcnt=0;
for(int i=0;i<n;i++)
cin>>map[i];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
flag[i][j]=false;
}
}
Slove(0,0);
cout<<maxcnt<<endl;
}
return 0;
}