POJ 1321 棋盘问题
2016-11-02 20:00
141 查看
Description
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
Input
输入含有多组测试数据。
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
Output
对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。
Sample Input
2 1
#.
.#
4 4
…#
..#.
.#..
#…
-1 -1
Sample Output
2
1
简单的全部遍历即可,该列有棋子就标记,直至所有棋子全部放下为止。
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
Input
输入含有多组测试数据。
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
Output
对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。
Sample Input
2 1
#.
.#
4 4
…#
..#.
.#..
#…
-1 -1
Sample Output
2
1
简单的全部遍历即可,该列有棋子就标记,直至所有棋子全部放下为止。
#include<stdio.h> #include<stdlib.h> #define MAX 15 int count = 0; int flag[MAX]; char map[MAX][MAX]; int n,k; void dfs(int cur,int num) { if(num == k){ /** 如果num==k 也就是,当前方案可行*/ count++; return; } for(int i = cur; i<n; i++){ for(int j = 0; j<n; j++){ //遍历深搜每一个 if(map[i][j]!='.' && flag[j] == 0){ //跳过不在棋盘上的以及这一列上面放了棋子的列 flag[j] = 1; dfs(i+1,num+1); flag[j] = 0; } } } } int main() { scanf("%d %d",&n,&k); while(n!=-1 && k!=-1){ getchar(); for(int i = 0; i < n; i++) gets(map[i]); count = 0; dfs(0,0); printf("%d\n",count); scanf("%d %d",&n,&k); } return 0; }
相关文章推荐
- POJ 1321 棋盘问题
- POJ_1321_棋盘问题
- poj 1321 棋盘问题
- POJ 1321 棋盘问题
- POJ 1321, 棋盘问题
- POJ 1321-棋盘问题
- POJ 1321 棋盘问题 DFS
- POJ_1321 棋盘问题解题报告
- POJ-1321 棋盘问题 解题报告
- poj1321棋盘问题
- poj1321——棋盘问题
- Poj 1321 棋盘问题
- poj 1321 棋盘问题
- POJ 1321 棋盘问题 dfs回溯
- poj 1321 棋盘问题
- POJ 1321-棋盘问题 简单搜索DFS
- POJ 1321 棋盘问题类似八皇后 dfs搜索
- POJ1321 棋盘问题 解题报告
- POJ 1321 棋盘问题 DFS
- poj 1321 棋盘问题 DFS+回溯 回溯学习