#include<algorithm>
#include<iostream>
#include<cstdio>
#include<stack>
#include<cstdlib>
using namespace std;
char map[5][5];
int num, n;
bool find(int x,int y)//判断当前位置能不能放
{
int i, j;
for(i=0; i<y; i++) //y 坐标的判断
if(map[x][i]=='X')
break;
else if(map[x][i]=='K')
return false;
for(j=0; j<x; j++) //x坐标的判断
if(map[j][y]=='X')
break;
else if(map[j][y]=='K')
return false;
return true;
}
int dfs(int x, int count)
{
int i,j;
if(num<count) num = count;
for(i=x; i<n; i++)
for(j=0; j<n; j++)
if(map[i][j]!='K'&& map[i][j]!='X' && find(i,j)) //如果当前位置可放的话就继续搜素
{
map[i][j] = 'K';
count++;
dfs(i,count);
count = 0; //递归后应该将改变的量再次变过来
map[i][j]='.';
}
}
int main()
{
while(scanf("%d",&n)&&n)
{
getchar();
for(int i=0; i<n; i++)
gets(map[i]);
num = 0;
dfs(0, 0);
printf("%d\n",num);
}
system("pause");
return 0;
}
zoj 1002 dfs
最新推荐文章于 2019-04-26 13:42:16 发布