poj 1321 棋盘问题(dfs)

http://poj.org/problem?id=1321

#include<stdio.h>
#include<string.h>
#define N 100
char str[N][N];
int n,ans,k,r[N],c[N],l;
struct node
{
    int x;
    int y;

}p[N];
void dfs(int num,int sum)
{
    if(num<=l&&sum==0)
    {

        ans++;
        return ;
    }
    if(num>=l)
    {

        return ;
    }

    int x=p[num].x;
    int y=p[num].y;
    if(r[x]==0&&c[y]==0)
    {
        r[x]=1;
        c[y]=1;
        dfs(num+1,sum-1);
         r[x]=0;
         c[y]=0;
        dfs(num+1,sum);
    }
    else
    {
        dfs(num+1,sum);
    }


}
int main()
{
    int i,j;
    while(scanf("%d%d",&n,&k)!=EOF)
    {
        if(n==-1&&k==-1)break ;
        ans=0;
        memset(r,0,sizeof(r));
        memset(c,0,sizeof(c));

        getchar();
        for( i=0;i<n;i++)
        scanf("%s",str[i]);
        l=0;
        for(i=0;i<n;i++)
        {
             int len=strlen(str[i]);
            for(j=0;j<len;j++)
            {
                if(str[i][j]=='#')
                {
                    p[l].x=i;
                    p[l].y=j;
                    l++;

                }
            }
        }
        //printf("%d\n",l);
        dfs(0,k);
        printf("%d\n",ans);
    }
}

  

posted @ 2012-04-03 20:27  Szz  阅读(134)  评论(0编辑  收藏  举报