poj1321-棋盘问题(深搜)

来源:互联网 发布:数组长度可以是变量吗 编辑:程序博客网 时间:2024/06/14 05:18


思路:用深搜, 注意有两个终止条件。一个是棋盘的范围, 一个是棋子的数量。但是注意棋子的判断要在棋盘的前面。因为可能这一次的搜索超出了棋盘, 但是这一次也刚好是棋子的数量。

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=10;const int INF=0x3f3f3f3f; int row[maxn], cnt, num;int n, k;char  mp[maxn][maxn];void dfs(int col){if(num==k){cnt++;return;}if(col>n)return;for(int i=1; i<=n; i++){if(!row[i] && mp[i][col]=='#'){row[i]=1; num++;dfs(col+1);row[i]=0;num--;}}dfs(col+1);return;}int main(){while(cin>>n>>k && (n!=-1 && k!=-1)){cnt=num=0;memset(row, 0, sizeof(row));for(int i=1; i<=n; i++){for(int j=1; j<=n; j++){cin>>mp[i][j];}}dfs(1);cout<<cnt<<endl;}return 0;}