POJ 1321.棋盘问题
来源:互联网 发布:软件就业前景 编辑:程序博客网 时间:2024/06/02 07:29
题目:http://poj.org/problem?id=3009
AC代码(C++):
#include <iostream>#include <algorithm>#include <stdio.h>#include <vector>#include <queue>#include <math.h>#include <string>#include <string.h>#include <bitset>#define INF 0xfffffff#define MAXN 10using namespace std;int n,k;char map[MAXN][MAXN];int cnt,ans;bool isOK(int x, int y){for(int i = 0; i < n; i++){if(map[i][y]=='*')return false;}for(int i = 0; i < n; i++){if(map[x][i]=='*')return false;}return true;}void dfs(int x, int y){if(cnt==k){ans++;return;}if(y<n-1)y++;else{x++;y = 0;}int i = x;int j = y;bool flag = false;for(; i < n; i++){for(; j < n; j++){if(map[i][j]=='#'&&isOK(i,j)){map[i][j] = '*';cnt++;dfs(i,j);cnt--;map[i][j] = '#';dfs(i,j);flag = true;break;}}if(flag)break;j = 0;}}int main(){ while(cin>>n>>k){ if(n==-1&&k==-1)break; cnt = 0; ans = 0; for(int i = 0; i < n; i++)cin>>map[i]; dfs(0,-1);cout<<ans<<endl;}}总结: 深搜. 需要注意的是棋子都是一样的, 还有就是摆放棋子不能在同行同列. 所以可以看做是一个二叉树, 对每个不同行同列的#号, 有两种情况: 放棋子和不放棋子. 因为规模不大, 而且要求求出所有解的数量, 所以这样搜不会超时.
阅读全文
0 0
- POJ 1321.棋盘问题
- POJ 1321.棋盘问题
- POJ 1321.棋盘问题
- POJ 1321 棋盘问题
- poj 1321 棋盘问题
- poj 1321 棋盘问题
- Poj 1321 棋盘问题
- POJ 1321 棋盘问题
- POJ 1321 棋盘问题
- POJ-1321-棋盘问题
- poj 1321棋盘问题
- POJ 1321 棋盘问题
- poj 1321 棋盘问题
- POJ 1321 棋盘问题
- poj 1321 棋盘问题
- poj 棋盘问题
- poj 1321 棋盘问题
- poj 1321 棋盘问题
- 独家 | 关于数据管理标准化工作的思考
- 【新工具】Java条形码组件Spire.Barcode for JAVA 发布 | 附下载
- Golang---TCP
- Linux中的shell到底是什么?
- JDBC DAO设计
- POJ 1321.棋盘问题
- 在一个图形类中计算三角形和矩形的周长和面积
- 去掉myeclipse创建maven的项目名后缀
- Mac 配置Maven环境变量
- 调用图灵API
- PMP 项目管理
- SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded 解决思路
- ARM、DSP、FPGA的技术特点和区别
- 动画——帧动画(Drawable Animation)