题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1002
#include<stdio.h>
#define true 1
#define false 0
char map[4][4];
int vis[4][4];
int max,count;
int n;
int is_ok(int a,int b)
{
if(map[a][b]=='X')
return false;
if(vis[a][b]==1)
return false;
int i,j;
i=a,j=b;
j++;
while(j<n&&map[i][j]!='X')
{
if(vis[i][j]==1)
return false;
j++;
}
i=a,j=b;
j--;
while(j>=0&&map[i][j]!='X')
{
if(vis[i][j]==1)
return false;
j--;
}
i=a,j=b;
i++;
while(i<n&&map[i][j]!='X')
{
if(vis[i][j]==1)
return false;
i++;
}
i=a,j=b;
i--;
while(i>=0&&map[i][j]!='X')
{
if(vis[i][j]==1)
return false;
i--;
}
return true;
}
void shuaxin_max()
{
if(max<count)
max=count;
}
void dfs(int a,int b)
{
if(is_ok(a,b)==true)
{
vis[a][b]=1;
int temp=++count;
shuaxin_max();
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i!=a&&j!=b)
{
dfs(i,j);
count=temp;
}
}
}
vis[a][b]=0;
}
}
int main(void)
{
while(scanf("%d",&n)!=EOF && n!=0)
{
getchar();
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%c",&map[i][j]);
vis[i][j]=0;
}
getchar();
}
max=count=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
count=0;
dfs(i,j);
}
}
printf("%d\n",max);
}
}