这个题确实有点简单,看清楚不能同列同行就好了,用一个一维数组标记哪一列用了往下搜就好了
#include<stdio.h> int flag[8]={1,1,1,1,1,1,1,1},i,j,n,k,num=0; char arr[10][11]; void dfs(int a,int b) { int ii,jj; if(b==0) { num++; return ; } for(ii=a+1;ii<n;ii++) for(jj=0;jj<n;jj++) { if(flag[jj]&&arr[ii][jj]=='#') { flag[jj]=0; b--; dfs(ii,b); b++; flag[jj]=1; } } } int main() { char c; while(~scanf("%d%d",&n,&k)&&(n!=-1||k!=-1)) { scanf("%c",&c); for(i=0;i<n;i++) for(j=0;j<n+1;j++) scanf("%c",&arr[i][j]); dfs(-1,k); printf("%d",num); printf("\n"); num=0; } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-13 02:12:47