#include <iostream>
using namespace std;
int n;
char map[5][5];
int res;
bool judge(int x,int y)
{
for(int i = x; i >= 0; i--)
{
if(map[i][y] == '0')
{
return false;
}
if(map[i][y] == 'X')
{
break;
}
}
for(int j = y; j >= 0; j--)
{
if(map[x][j] == '0')
{
return false;
}
if(map[x][j] == 'X')
{
break;
}
}
return true;
}
void DFS(int i,int a)
{
if(i == n*n)
{
if(a > res)
{
res = a;
}
return;
}
int x,y;
x = i/n;
y = i%n;
if(map[x][y] == '.' && judge(x,y) == true)
{
map[x][y] = '0';
DFS(i+1,a+1);
map[x][y] = '.';
}
DFS(i+1,a);
}
int main()
{
while(cin>>n)
{
if(n == 0)
{
break;
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
cin>>map[i][j];
}
}
res = 0;
int num = 0;
DFS(num,0);
cout<<res<<endl;
}
return 0;
}
hdu 1045 DFS回溯
最新推荐文章于 2019-07-17 11:43:27 发布