题目链接:http://poj.org/problem?id=1321
逐行放置。
dfs(int row,int num) 从第row行放,还剩下num个棋子没有放好。
1 #include<cstdio> 2 #include<cstring> 3 char pic[10][10]; 4 int col[10]; //用来记录某列是否放过 5 int n,k; 6 int cnt; 7 void dfs(int row,int num) //从第row行放,还剩下num个棋子没有放好 8 { 9 for(int j=0;j<n;j++) 10 { 11 if(pic[row][j]==‘#‘&&!col[j]) 12 { 13 if(num==1) //放置完成,方案数加一 14 cnt++; 15 else { 16 col[j]=1; 17 for(int i=row+1;i+num-2<n;i++) 18 dfs(i,num-1); 19 col[j]=0; 20 } 21 } 22 } 23 } 24 25 int main() 26 { 27 while(scanf("%d%d",&n,&k)&&(n!=-1&&k!=-1)) 28 { 29 memset(col,0,sizeof(col)); 30 cnt=0; 31 for(int i=0;i<n;i++) 32 scanf("%s",pic[i]); 33 for(int i=0;i+k-1<n;i++) 34 { 35 dfs(i,k); 36 } 37 printf("%d\n",cnt); 38 } 39 }
时间: 2024-09-29 10:21:44