标签:nyoj

4
.X..
....
XX..
....
2
XX
.X
3
.X.
X.X
.X.
3
...
.XX
.XX
4
....
....
....
....
0
样例输出
5
1
5
2
4
AC代码:
<span style="font-size:18px;">#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std ;
char mp[100][100] ;
int n,maxn ;
int check(int r,int c)
{
int flag = 1 ;
for(int i = r ;i>=0 ;i--)
{
if(mp[i][c] == 'X')
break ;
if(mp[i][c] == 'b')
{
flag = 0 ;
break ;
}
}
for(int j = c ;j>=0 ;j--)
{
if(mp[r][j] == 'X')
break ;
if(mp[r][j] == 'b')
{
flag = 0 ;
break ;
}
}
return flag ;
}
void dfs(int pos,int sum)
{
int r = pos/n ,c=pos%n;
if(pos == n*n)
{
if(sum > maxn)
maxn = sum ;
return ;
}
if(mp[r][c] == '.')
{
if(check(r,c))
{
mp[r][c] = 'b' ;
dfs(pos+1,sum+1) ;
mp[r][c] = '.' ;
}
}
dfs(pos+1,sum) ;
}
int main()
{
while(scanf("%d",&n)!=EOF && n)
{
memset(mp,0,sizeof(mp)) ;
for(int i = 0 ;i<n ;i++)
for(int j = 0 ;j<n ;j++)
{
cin>>mp[i][j] ;
}
maxn = 0 ;
dfs(0,0) ;
printf("%d\n",maxn) ;
}
return 0 ;
}
</span>标签:nyoj
原文地址:http://blog.csdn.net/u012566693/article/details/45154007