算法分析与复杂性原理 第一次上机 棋盘问题
来源:互联网 发布:舒缦水暖床垫淘宝网 编辑:程序博客网 时间:2024/05/22 15:13
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
- 输入
- 输入含有多组测试数据。
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。 - 输出
- 对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。
- 样例输入
2 1#..#4 4...#..#..#..#...-1 -1
- 样例输出
21
#include <iostream>#include <string.h>#include <stdio.h>using namespace std;int n, k;int ChessBoard[8][8];bool Column[8];int result;void getResult(int row, int k){ if(row > n - k) return; if(k == 0) { result ++; return; } for(int i = 0; i < n; i++) { if(ChessBoard[row][i] == 0 && !Column[i]) { Column[i] = true; getResult(row + 1, k - 1); Column[i] = false; } } getResult(row + 1, k);}int main(){ cin >> n >> k; while(n != -1 && k != -1) { char ch; result = 0; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { cin >> ch; switch(ch) { case '#': ChessBoard[i][j] = 0; break; case '.': ChessBoard[i][j] = -1; } } Column[i] = false; } getResult(0, k); cout << result <<endl; cin >> n >> k; } return 0;}
阅读全文
0 0
- 算法分析与复杂性原理 第一次上机 棋盘问题
- 算法分析与复杂性原理 第一次上机 二叉树的操作
- 算法设计与复杂性原理 第一次上机 玛雅历
- 算法分析与复杂性理论 第一次上机 2的幂次方表示
- 算法设计与复杂性理论 第一次上机 仙岛求药
- 算法设计与复杂性分析 第二次上机 Dynamic Median
- 算法设计与复杂性分析(1)
- 算法分析与设计-05-棋盘覆盖问题算法
- 算法分析与设计2017-1-棋盘覆盖问题算法
- 算法复杂性分析
- 算法复杂性分析
- 计算机算法设计与分析之棋盘覆盖问题
- 【算法设计与分析】2、棋盘覆盖问题
- 棋盘覆盖问题算法分析与实现(递归)
- 算法设计与分析——棋盘覆盖问题
- 算法分析与设计之棋盘覆盖问题
- 北大算法分析和复杂性理论-2017算法课第一次作业E:二叉树的操作
- 算法设计与分析之棋盘算法
- bzoj2002Bounce 弹飞绵羊 动态树(Link-Cut-Tree)
- SDUT_2122 数据结构实验之链表七:单链表中重复元素的删除
- 51nod 1419 最小公倍数挑战
- Project Euler 21-25题
- Python实现插入排序
- 算法分析与复杂性原理 第一次上机 棋盘问题
- 达内课程-API(java.lang.Object和java.lang.String)
- css3 圆角
- java原生序列化和Kryo(dubbo)序列化性能比较
- CODEVS 1011 数的计算 & 2001NOIP普及组T1
- 洛谷 P1944 最长括号匹配_NOI导刊2009提高(1)
- jsp九大类值对象四大作用域
- Spring与Hibernate整合(配置模式)
- HDU