POJ - 1321 A - 棋盘问题
dfs水题,还卡了我一下。。。
//#include<bits/stdc++.h>
#include<iostream>
#include<cstring>
using namespace std;
const int N =20;
typedef long long ll;
char ma[N][N];
bool vis[N];
ll ans =0,n,k;
void dfs(ll t,ll cnt)
{
if(t>n)
return ;
if(cnt==k)
{
ans++;
return ;
}
for(int i=0; i<n; i++)
{
if(!vis[i]&&ma[t][i]=='#')
{
vis[i] =1;
dfs(t+1,cnt+1);
vis[i] =0;
}
}
dfs(t+1,cnt);//一行遍历完继续遍历下一行。
}
int main()
{
while(~scanf("%lld%lld",&n,&k))
{
if(n==-1&&k==-1)
return 0;
ans =0;
memset(vis,0,sizeof(vis));
for(int i=0; i<n; i++)
{
scanf("%s",ma[i]);
}
dfs(0,0);
printf("%lld\n",ans);
}
return 0;
}