hdu 1045

#include<stdio.h>
#include<stdlib.h>
char map[99][99];
int maxsum=0;
int sum=0;
int N;
int safe(int x,int y)
{
    for(int i=x;i>=0;i--)
    {
        if(map[i][y]=='X')
            break;
        if(map[i][y]=='1')
            return 0;
    }
    for(int i=x;i<N;i++)
    {
        if(map[i][y]=='X')
            break;
        if(map[i][y]=='1')
            return 0;
    }
    for(int j=y;j<N;j++)
    {
        if(map[x][j]=='X')
            break;
        if(map[x][j]=='1')
            return 0;
    }
    for(int j=y;j>=0;j--)
    {
        if(map[x][j]=='X')
            break;
        if(map[x][j]=='1')
            return 0;
    }
    return 1;
}
void jian(int step)
{
    if(step==N*N)
    {
    if(maxsum<sum)
        maxsum=sum;
    return ;
    }
    
        if(safe(step/N,step%N)&&map[step/N][step%N]=='.')
        {
            
            map[step/N][step%N]='1';
            sum++;
            jian(step+1);
            sum--;
            map[step/N][step%N]='.';
            
        }
        jian(step+1);
}
int main()
{
    //freopen("in.txt","r",stdin);
    while(scanf("%d",&N))
    {
         maxsum=0;
         sum=0;
        if(N==0)
            break;
        for(int i=0;i<N;i++)
            scanf("%s",map[i]);
        jian(0);
    printf("%d\n",maxsum);
    }
    return 0;
}

 

posted on 2017-01-17 15:41  霸王程  阅读(67)  评论(0编辑  收藏  举报