poj 1321棋盘问题

来源:互联网 发布:mac os x 10.11.4 dmg 编辑:程序博客网 时间:2024/06/16 20:07

逐行进行广度优先遍历,代码如下:

//elingxiao#include <iostream>#include <cstdio>#include <cstring>using namespace std;int n,k;int vis[10];int ans=0;char map[10][10];void dfs(int cur,int num)//将第k-num颗棋子放在cur行上 {    if(num==k)//仅剩一种情况     {        ans++;        return;    }     if(cur==n)//行数到底了     {        return;    }     for(int i=0;i<n;i++)//标记列     {        if(!vis[i]&&map[cur][i]=='#')        {            vis[i]=1;            dfs(cur+1,num+1);            vis[i]=0;        }    }    dfs(cur+1,num);} int main(){    while(scanf("%d %d",&n,&k)!=EOF&&n!=-1&&k!=-1)    {        ans=0;    //每次循环初始化         for(int i=0;i<n;i++)        {            for(int j=0;j<n;j++)            {                cin>>map[i][j];            }        }        memset(vis,0,sizeof(vis));        dfs(0,0);        printf("%d\n",ans);                                 }    return 0;}
0 0