标签: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