棋盘问题
#include<iostream>using namespace std;
int vis[8][8]; //记录某个坐标是否下过子
char chs[8][8]; //棋盘状态
int ans=0;
int n,k;
int m; //下第m个棋子
void dfs(int m,int x);
int main()
{
int i,j;
while(1)
{
cin>>n>>k;
if(n==-1&&k==-1) break;
ans=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cin>>chs[i][j];
}
}
dfs(0,0); //在i行下第m个棋子
cout<<ans<<endl;
}
}
void dfs(int m,int x)
{
int i,j;
if(m==k)
{
ans++;
return;
}
else
{
for(i=x;i<n;i++)
{
for(j=0;j<n;j++)
{
if(chs[i][j]=='#'&&!vis[i][j])
{
vis[i][j]=1;
dfs(m+1,x+1);
vis[i][j]=0;
}
}
}
}
}