poj 1321 棋盘问题

来源:互联网 发布:知乎 关于毛泽东的书 编辑:程序博客网 时间:2024/05/22 09:48

题目链接:http://poj.org/problem?id=1321

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>#include <vector>#include <queue>#include <stack>using namespace std;#define INF 0x3f3f3f3ftypedef long long ll;int n,k;int ans;char map[10][10];int vis[10][10];int r[10],c[10];bool check(int i,int j){    if(!r[i]&&!c[j])        return true;    else        return false;}void Dfs(int step,int ii) //当前已经放了step个棋子,上一次放置的位置为第ii行{    if(step==k){        ans++;        return ;    }    for(int i=ii+1;i<n;i++){  //在每一种放置方案里面,每次从上一次放置棋子的下一行开始搜索        for(int j=0;j<n;j++){            if(map[i][j]=='#'&&!vis[i][j]&&check(i,j)){                vis[i][j]=1; r[i]=1; c[j]=1;                Dfs(step+1,i);                vis[i][j]=0; r[i]=0; c[j]=0;            }        }    }}int main(){    //freopen("in.txt","r",stdin);    //freopen("out.txt","w",stdout);    while(cin>>n>>k&&!(n==-1&&k==-1)){        ans=0;        memset(vis,0,sizeof vis);        memset(r,0,sizeof r);        memset(c,0,sizeof c);        for(int i=0;i<n;i++){            for(int j=0;j<n;j++){                cin>>map[i][j];            }        }        Dfs(0,-1);        cout<<ans<<endl;    }    return 0;}


0 0
原创粉丝点击