- 1#include 2#include 3 char pic[10][10];
- 4 int col[10]; //用来记录某列是否放过
- 5 int n,
- k;
- 6 int cnt;
- 7 void dfs(int row, int num) //从第row行放,还剩下num个棋子没有放好
- 8 {
- 9
- for (int j = 0; j) 10 {
- 11
- if (pic[row][j] == '#' && !col[j]) 12 {
- 13
- if (num == 1) //放置完成,方案数加一
- 14 cnt++;
- 15
- else {
- 16 col[j] = 1;
- 17
- for (int i = row + 1; i + num - 2) 18 dfs(i, num - 1);
- 19 col[j] = 0;
- 20
- }
- 21
- }
- 22
- }
- 23
- }
- 24 25 int main() 26 {
- 27
- while (scanf("%d%d", &n, &k) && (n != -1 && k != -1)) 28 {
- 29 memset(col, 0, sizeof(col));
- 30 cnt = 0;
- 31
- for (int i = 0; i) 32 scanf("%s", pic[i]);
- 33
- for (int i = 0; i + k - 1) 34 {
- 35 dfs(i, k);
- 36
- }
- 37 printf("%d\n", cnt);
- 38
- }
- 39
- }
来源: http://www.bubuko.com/infodetail-1994874.html