例题链接:
https://vjudge.net/contest/339651#problem/B
#include <cstdio> #include <iostream> using namespace std; char a[10][10]; int biaoji[10]; int sum,num; int m,n; void DFS(int x) { if(num==n) { sum++; return ; //sum满足条件,记得返回 } if(x>m) return; for (int i=1;i<=m;i++) { if(biaoji[i]==0&&a[x][i]=='#') { num++; biaoji[i]=1; DFS(x+1); biaoji[i]=0; num--; } } DFS(x+1); } int main () { while (cin >> m >> n) { if(m==-1&&n==-1) break; memset(biaoji, 0, sizeof(biaoji)); for (int i=1;i<=m;i++) for (int j=1;j<=m;j++) cin >> a[i][j]; num=0; sum=0; DFS(1); cout << sum << endl; } }