poj1321DFS

题目链接:点击打开链接

思路:按行枚举所有情况就可以了,代码有注解

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=9;
int col[maxn],tol,m,n,k;
 char op[maxn][maxn];
void DFS(int cur)
{
    if(m==k)
    {
          tol++;
          return;
    }
    if(cur>=n)return;//已经过了最后一行
for(int i=0;i<n;i++)
{
    if(op[cur][i]=='#'&&!col[i])
    {
        col[i]=1;
        m++;
        DFS(cur+1);
        col[i]=0;
        m--;
    }

}
 DFS(cur+1);//这一行不选,进入下一行
}
int main()
{
    int i,j;

    while(scanf("%d %d",&n,&k)&&!(n==-1&&k==-1))
    {
        memset(col,0,sizeof(col));//初始化标记列数组
     for(i=0;i<n;i++)
        scanf("%s",op[i]);
        tol=0;
        m=0;//已经放了几个棋子
     DFS(0);
     printf("%d\n",tol);
    }
    return 0;
}


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值