POJ1321棋盘问题

目录

    • 题目描述:
    • 思路分析
    • 代码

题目描述:

在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
日常安利本题我的博客

思路分析

本题和N皇后问题唯一的区别就是摆放的棋子数可以小于棋盘大小N,这里采用每行都可以有一次那个元素都不选的机会,在代码的第44行 体现这个操作,这就可以解决这个问题。另外由于加了选择的参数,所以在判断是否增加答案数量是的判断也改了。

代码

#include
#include
#include
#include
#include
#include
#include 
#include
using namespace std ;

#define mem(a) memset(a,0,sizeof(a))
#define ll long long

const double eps = 1e-8;
const int maxn = 10;//须填写
const int inf = 0x3f3f3f3f;

char pic[maxn][maxn];
int vis[maxn];
int results;
int n,k;

void research(int floors, int select)
{

    if(select == k)
    {
        results++;
        //printf("%d\n",results);判断为有用路径
    }

    else if(floors < n)
    {
        for(int i=0;i

你可能感兴趣的:(poj,搜索)