POJ_1321 棋盘问题(深搜)
来源:互联网 发布:淘宝店铺一键复制软件 编辑:程序博客网 时间:2024/05/23 01:19
题目来源:点击打开链接
题目大意:给一个一定形状的棋盘,其大小为N*N,‘#’代表可放棋子,‘.’代表不可放棋子。共k个棋子,问一共有多少摆放方法?
这是一道简单的深搜问题,直接上代码了。
/********************************************深度优先搜索***********************************************/#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<string>#include<algorithm>#include<stack>#include<queue>#include<map>using namespace std;const int maxn = 8+2;//定义最大棋盘int n;//记录棋盘真正大小int k;//记录棋子个数char mymap[maxn][maxn];//定义我的棋盘,记录形状int col[maxn];//记录某一列有没有被放入棋子int ans;//记录结果//mybegin代表当前所处的行 mylength代表还有多少个棋子未被放入void dfs( int mybegin, int mylength){ for( int i = 0; i < n; i++) { //当前列没有被放入棋子并且可以被放入棋子 if( col[i] == 0 && mymap[mybegin][i] == '#') { //如果只剩下一个棋子未被放入 则将它放入到mymap[mybegin][i]这个点 ans++ if( mylength == 1) ans++; else { col[i] = 1;//将当当前棋子放入到该点(mymap[mybegin][i]) //继续往下搜索 for( int j = mybegin+1; j <= n-mylength+1; j++)//n-mybegin+1 = n-(mylength-1); dfs(j,mylength-1);//减少了一个棋子 col[i] = 0; } } }}int main(){ while( scanf("%d%d",&n,&k) == 2 && n != -1 && k != -1) { memset(col,0,sizeof(col));//初始化列标记为0,表示每一列都没有放入棋子 ans = 0;//初始化棋子 for( int i = 0; i < n; i++) scanf("%s",mymap[i]); for( int i = 0; i <= n-k; i++)//从第0行搜索到第n-k行,自己可以画图理解为什么这样 dfs(i,k); printf("%d\n",ans); } return 0;}
0 0
- POJ_1321 棋盘问题(深搜)
- poj_1321 棋盘问题(dfs)
- poj_1321 棋盘问题
- A_棋盘问题(POJ_1321)
- POJ_1321 棋盘问题
- POJ_1321 棋盘问题解题报告
- poj_1321
- 棋盘问题(深搜)
- poj1321棋盘问题(深搜)
- poj1321-棋盘问题(深搜)
- POJ 1321 棋盘问题 ( 深搜)
- poj1321 棋盘问题(深搜dfs)
- POJ 1321----棋盘问题(深搜)
- POJ 1321 棋盘问题(深搜)
- POJ-1321 棋盘问题(深搜)
- POJ:1321 棋盘问题(深搜DFS)
- POJ 1321 棋盘问题(dfs深搜)
- poj 1321 棋盘问题(深搜)
- Spark机器学习过程梳理
- in与exist , not in与not exist 的区别
- C++ 命名空间namespace
- 使用java下载http形式的图片
- 实验5:使用网络技术-天气预报
- POJ_1321 棋盘问题(深搜)
- HttpClient:模拟表单提交文件,发送multipart/form-data数据
- 何为初始化
- aixboot code 0999 0666
- MFC学习笔记(4)——Windows程序的类封装 下
- 1075. PAT Judge (25)
- [洛谷1250] 种树
- Java 中 static 作用详解
- Intent使用意图之~添加Category