题目:http://poj.org/problem?id=1321
最近状态有点down, 练练手
1 #include<cstdio> 2 using namespace std; 3 char yj[10][10]; 4 int vis[10],ans,n; 5 void dfs(int x,int y) 6 { 7 for (int i=0;i<n;i++) 8 { 9 if (!vis[i]&&yj[x][i]=='#') 10 { 11 if (y==1) 12 { 13 ans++; 14 continue; 15 } 16 for (int j=x+1;j<n-y+2;j++) 17 { 18 vis[i]=1; 19 dfs(j,y-1); 20 vis[i]=0; 21 } 22 } 23 } 24 return ; 25 } 26 int main() 27 { 28 int k,i; 29 while (~scanf("%d %d",&n,&k)) 30 { 31 if (n==-1&&k==-1) break; 32 for (i=0;i<n;i++) 33 { 34 scanf("%s",yj[i]); 35 vis[i]=0; 36 } 37 ans=0; 38 for (i=0;i<=n-k;i++) 39 { 40 dfs(i,k); 41 // printf("%d %d\n",i,ans); 42 } 43 printf("%d\n",ans); 44 } 45 return 0; 46 }