标签:
POJ 1321 棋盘问题 http://poj.org/problem?id=1321
/*POJ 1321 棋盘问题 --- DFS*/ #include <cstdio> #include <cstring> int n, k, cnt; bool visit[10]; //标记列的访问状态 char mapp[10][10]; /*从第r行开始正确放置p个棋子*/ void dfs(int r, int p){ if (p == 0){ ++cnt; return; } if (r >= n || n-r < p) //剪枝 --> n-r >= p才能成功放置 return; for (int j = 0; j < n; ++j){ if (mapp[r][j] == ‘#‘ && !visit[j]){ visit[j] = 1; //在r行j列放一枚棋子 dfs(r + 1, p - 1); visit[j] = 0; } } dfs(r + 1, p); //由于棋子数小于行数, 可以第r行不放棋子,从下一行开始 } int main() { while (scanf("%d%d", &n, &k) == 2){ if (n == -1 && k == -1) break; cnt = 0; memset(visit, 0, sizeof visit); for (int i = 0; i < n; ++i){ scanf("%s", mapp[i]); } dfs(0, k); printf("%d\n", cnt); } return 0; }
标签:
原文地址:http://www.cnblogs.com/tommychok/p/5020850.html