POJ 1321 棋盘问题 --- DFS
2015-12-04 23:48
465 查看
POJ 1321
题目大意:给定一棋盘,在其棋盘区域放置棋子,需保证每行每列都只有一颗棋子。 (注意 .不可放 #可放)
解题思路:利用DFS,从第一行开始依次往下遍历,列是否已经放置棋子用一个数组标记,直至放完要求的棋子数。
View Code
题目大意:给定一棋盘,在其棋盘区域放置棋子,需保证每行每列都只有一颗棋子。 (注意 .不可放 #可放)
解题思路:利用DFS,从第一行开始依次往下遍历,列是否已经放置棋子用一个数组标记,直至放完要求的棋子数。
/*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; }
View Code
相关文章推荐
- Pig_7. 常用的数据分析方法 -- 待完善
- 蓝桥杯--历届试题 数字游戏
- HDU 1285 确定比赛名次(拓扑排序)
- hdu_1010_Tempter of the Bone
- 黑马程序员__Java输入输出流
- 子数组最大乘积
- My way to Python - Day04 - 模块
- HTML5 history API,创造更好的浏览体验
- 设置maven编译器级别
- Effective C++读书笔记-----条款20:宁以pass-by-reference-to-const替换pass-by-value
- java 字符串比较诡异状况
- 360黑科技插件开发框架 DroidPlugin demo 下载
- 网站整合CKEditor和CKFinder(Java版)
- HD_1247Hat’s Words (字典树)
- codeforces 416D Population Size
- IIS6中ASP.NET实现对静态文件的授权控制
- 第二阶段的事后诸葛亮
- iOS App启动图不显示的解决办法.
- EditText在Dialog中得到焦点并全部选中且弹出软件键盘
- 2015第49周五