基础题,一行一行的摆下来,从第一行开始,枚举所有情况,摆放好棋子后,该棋子摆放的列就用vis标记,不能再放置棋子
代码如下:
#include <cstdio>
#include <cstring>
int n, k, ans, sum, vis[10];
char map[10][10];
void dfs(int x)
{
if(sum == k)
{
ans++; return;
}
if(x >= n) return;
else
{
for(int i = 0; i < n; i++)
{
if(map[x][i] == '#' && vis[i] == 0)
{
vis[i] = 1; sum++;
dfs(x+1);
vis[i] = 0, sum--;
}
}
}
dfs(x + 1);
}
int main()
{
while(scanf("%d%d", &n, &k) && n != -1 && k != -1)
{
for(int i = 0; i < n; i++)
{
scanf("%s", map[i]);
}
memset(vis, 0, sizeof(vis));
sum = 0, ans = 0;
dfs(0);
printf("%d\n", ans);
}
return 0;
}