题目链接
题目大意:
一块 n * n 大小的棋盘,放 k 个棋子,不可以在同一行或者 同一列 ,问几种放置方案
解题思路:
按行搜索,后面for循环里再判断是否在同一列
代码如下:
#include<iostream>
#include<cstring>
using namespace std;
int n,k;
char a[11][11];
int vis[110];
int ans,sum;
void dfs(int u)
{
if(sum==k)
{
ans++;
return;
}
if(u==n)
return;
for(int i=0;i<n;i++)
{
if(vis[i]==0&&a[u][i]=='#')
{
sum++;
vis[i]=1;
dfs(u+1);
vis[i]=0;
sum--;
}
}
dfs(u+1);
}
int main()
{
int i,j;
while(cin>>n>>k)
{
if(n==-1&&k==-1)
break;
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
ans=0;
sum=0;
dfs(0);
cout<<ans<<endl;
}
}