http://poj.org/problem?id=1321

自己真是本了开始写了歌对于棋子有顺序的搜索,导致求出来是ans的阶乘种数了,因为k < n且不能在同一行同一列,只要按行搜索,记录列是否被访问过即可!

View Code
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 12
using namespace std;

char map[maxn][maxn];
bool vt[maxn];
int n,m,ans;


void dfs(int x,int len)
{
    int i,j;
    if (len == m)
    {
        ans++;
        return ;
    }
    for (i = x; i < n; ++i)
    {
        for (j = 0; j < n; ++j)
        {
            if (!vt[j] && map[i][j] == '#')
            {
                vt[j] = true;
                dfs(i + 1,len + 1);
                vt[j] = false;
            }
        }
    }
}

int main()
{
    //freopen("in.txt","r",stdin);
    int i;
    while (scanf("%d%d",&n,&m))
    {
        if (n == -1 && m == -1) break;
        for (i = 0; i < n; ++i) scanf("%s",map[i]);
        memset(vt,false,sizeof(vt));
        ans = 0;
        dfs(0,0);
        printf("%d\n",ans);
    }
    return 0;
}

相关文章:

  • 2021-09-06
  • 2021-09-18
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-23
  • 2021-09-05
猜你喜欢
  • 2021-10-24
  • 2021-07-13
  • 2022-12-23
  • 2021-10-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案