棋盘问题 POJ - 1321

Posted Bryson Chen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了棋盘问题 POJ - 1321相关的知识,希望对你有一定的参考价值。

#include<cstdio>
#include<cstring>
using namespace std;
int n,k,ans;
char Map[20][20],visL[11];   //标记列
void dfs(int step,int i)  // step已放的棋子数, i 当前第几行
{
    if(step==k)
    {
        ans++;
        return;
    }
    if(i>n)return;
    for(int j=1;j<=n;j++)
    {
            if(Map[i][j]==#&&!visL[j])
            {
                visL[j]=1;
                dfs(step+1,i+1);     //i行放棋子
                visL[j]=0;
            }

    }
    dfs(step,i+1);  //i行不放棋子
}
int main()
{
    while(~scanf("%d%d",&n,&k))
    {
        if(n==-1&&k==-1)break;
        for(int i=1;i<=n;i++)
            scanf("%s",Map[i]+1);
        memset(visL,0,sizeof(visL));
        ans=0;
        dfs(0,1);
        printf("%d\n",ans);

    }

    return 0;
}

 

以上是关于棋盘问题 POJ - 1321的主要内容,如果未能解决你的问题,请参考以下文章

POJ 1321 棋盘问题

POJ 1321 棋盘问题

POJ1321——棋盘问题

POJ 1321 -- 棋盘问题(DFS)

POJ 1321:棋盘问题

POJ 1321 棋盘问题