一个简单的搜索问题,但我还是搞半天搞不出来,递归实在是用不好
这题比八皇后难一些,k==n时,就是八皇后问题,但k<n的情况还是要考虑,原本k==n,每行都应该放一个,现在k<n,有的行不能放,所以每行搜索中,如果每一列都不符合,就需要搜寻下一行
代码如下:
#include<stdio.h>
#include<string.h>
char a[8][8];
bool col[8];
int n,k,tot;
void dfs(int x, int row)
{
if (x == k)
{
tot++; //每次等于k次数+1
return;
}
if (row > n) //防止越界
return;
for (int j = 0; j < n; j++)
{
if (a[row][j] == '#'&&col[j])
{
col[j] = false;
dfs(x + 1, row + 1);
col[j] = true;
}
}
dfs(x, row + 1);//一行中如果每一列都不满足需要搜寻下一行
}
int main()
{
while (scanf("%d%d", &n, &k) != EOF)
{
if (n == -1 & k == -1)
break;
for (int i = 0; i < n; i++)
scanf("%s", a[i]);
tot = 0;
memset(col, true, sizeof(col));
dfs(0, 0);
printf("%d\n", tot);
}
return 0;
}