poj1321

来源:互联网 发布:上海的美食知乎 编辑:程序博客网 时间:2024/05/17 04:11

链接:点击打开链接

题意:给出一个n*n的棋盘,#代表可以放的位置,将k个棋子摆到棋盘中,问有多少种不同的情况

代码:

#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include <cstring>using namespace std;int sign[10];char str[10][10];int n,k,sum;void dfs(int x,int num){    int i,j;    if(num==k){                         //棋子都用完时回溯        sum++;        return;    }    for(i=x;i<n;i++)                    //每一行逐次搜索    for(j=0;j<n;j++){        if(str[i][j]=='#'&&sign[j]==0){            sign[j]=1;                  //用过的标记上            dfs(i+1,num+1);            sign[j]=0;        }    }}int main(){    int i;while(scanf("%d%d",&n,&k)!=EOF&&n!=-1&&k!=-1){    sum=0;memset(sign,0,sizeof(sign));for(i=0;i<n;i++)    scanf("%s",str[i]);    dfs(0,0);    printf("%d\n",sum);}return 0;}


 

 

0 0