POJ 1321 棋盘问题

DFS

#include<iostream>
#include<algorithm>
using namespace std;
const int MAX_N=10;
int n,k;
int k_;
char cb[MAX_N][MAX_N];
bool has[MAX_N];
int ans;
void dfs(int lin){
    if(!k_ || lin>=n) {
        if(!k_) ans++;
        return;
    }
    for(int j=0;j<n;j++){
        if(!has[j] && cb[lin][j]=='#') {
            has[j]=true; k_--; dfs(lin+1); has[j]=false; k_++;
        }
    }
  // 这个递归不能放到上面的for循环里面(TLE) dfs(lin
+1); } int main(){ while(1){ scanf("%d%d",&n,&k); if(n==-1 && k==-1) break; fill(cb[0],cb[0]+MAX_N*MAX_N,'.'); fill(has,has+MAX_N,false); ans=0; // scanf %c why not valid for(int i=0;i<n;i++){ scanf("%s",&cb[i]); } k_=k; dfs(0); printf("%d\n",ans); } }

 

posted @ 2021-03-15 10:36  JhengWei  阅读(27)  评论(0编辑  收藏  举报