您的位置:首页 > 其它

DFS暴力求某集合上的某种的组合情况

2016-03-21 16:45 399 查看
看到有很多用DFS,八皇后,N骑士,还有什么给几个碎片拼正方形的,其实都是在一定数上的组合情况的枚举,好多都是本质上都是一样的,但是经常写的时候还是会卡一下,当个模板吧

比如这个从12个格子里不重不漏地找5个块的组合情况,数量上应该是792

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>

using namespace std;

//三行四列一共12个元素
const int r = 3, c = 4;
int zuhe;

bool mapp[10][10];

//从12个中选5个的组合方式
//paint当前状态是到(x, y)这个点,不包括(x, y)已经完成了dep个
void paint(int x, int y, int dep) {
if (dep == 5) {
zuhe++;
return;
}
if (x == r) return;
for (int i = y; i <= c; i++) {
if (i < c) {
mapp[x][i] = true;
paint(x, i + 1, dep + 1);
mapp[x][i] = false;
}
else {
paint(x + 1, 0, dep);
}
}
}

int main()
{
memset(mapp, false, sizeof(mapp));
zuhe = 0;
paint(0, 0, 0);  //从最左上角开始
cout << zuhe << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: