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); } }