问题
题目链接
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案Cinput
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案COutput
对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)Sample Input
2 1#..#4 4...#..#..#..#...-1 -1
Sample Output
21
问题分析
分析链接
AC代码
#include <iostream>#include <cstring>using namespace std;int n,k;int sum;int count; int T[8];char s[10][10];void dfs(int x,int n,int k){if(count == k){sum = sum + 1;return ;}if(x >= n) {return ;} for(int i = 0; i < n; i++){if(!T[i] && s[x][i] == "#"){T[i] = 1;count++;dfs(x+1,n,k);T[i] = 0;count--;}}dfs(x+1,n,k);}int main(){while(1){cin>>n>>k;if(n == -1 && k == -1){break;}sum = count = 0;for(int i = 0; i < n; i++){cin>>s[i];}memset(T, 0 , sizeof(T));dfs(0,n,k);cout<<sum<<endl;}}
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。