#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int n, k;
int ans[9][9];
char map[9][9];
int f(int i,int j) {
//if (ans[i][j] != -1) {
//return ans[i][j];
//}
int res = 0;
if (i == n) {
if (j > 1) {
//ans[i][j] = 0;
return 0;
}
if (j == 0) {
//ans[i][j] = 1;
return 1;
}
for (int x = 1; x <= n; x++) {
if (map[x][i] == '.')
continue;
int fl = 1;
for (int y = 1; y < i; y++)
if (map[x][y] == '@') {
fl = 0; break;
}
if (fl == 1)
res++;
}
//ans[i][j] = res;
return res;
}
if (j == 0) {
//ans[i][j] = 1;
return 1;
}
for (int x = 1; x <= n; x++) {
if (map[x][i] == '.')
continue;
int fl = 1;
for (int y = 1; y < i; y++)
if (map[x][y] == '@') {
fl = 0; break;
}
if (fl == 1) {
map[x][i] = '@';
res += f(i + 1, j - 1);
map[x][i] = '#';
}
}
res += f(i + 1, j);
//ans[i][j] = res;
return res;
}
int main() {
while (true) {
memset(ans, -1, sizeof(ans));
cin >> n >> k;
if (n == -1)
break;
getchar();
for (int x = 1; x <= n; x++) {
for (int y = 1; y <= n; y++)
map[x][y] = getchar();
getchar();
}
int res = f(1, k);
cout << res << endl;
}
return 0;
}
[Coursera]算法基础_Week6_深搜(1)_Q1
最新推荐文章于 2018-11-30 09:47:17 发布