简单DFS
思路简单
别忘记把测试代码注释掉
#include<iostream>
using namespace std;
char chess[10][10];
bool x_state[10];
bool y_state[10];
void input();
int valid(int x,int y);
void dfs(int x, int y, int d);
int n, num,cnt;
int main()
{
//freopen("D:\\test.txt", "r", stdin);
while (cin >> n >> num&&n!=-1&&num!=-1)
{
cnt = 0;
memset(x_state, true, sizeof(x_state));
memset(y_state, true, sizeof(y_state));
input();
dfs(0, 0, 0);
cout << cnt << endl;
}
}
void input()
{
int i;
for (i = 0; i < n; i++)
cin >> chess[i];
}
int valid(int x,int y)
{
if (x < 0 || x >= n || y < 0 || y >= n||chess[x][y]!='#')
return false;
if (x_state[x] == false || y_state[y] == false)
return false;
return true;
}
void dfs(int x,int y, int d)
{
int i, j;
if (d == num)
{
cnt++;
return;
}
for (i = x; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (valid(i, j))
{
x_state[i] = false;
y_state[j] = false;
dfs(i, j, d + 1);
x_state[i] = true;
y_state[j] = true;
}
}
}
}