迭代加深+剪枝

题目:埃及分数。

迭代加深可以对任意深度的解答树进行尝试,剪枝法可以用来确保树在每一层的结点数。从而避免了普通广度搜索和深度搜索带来的上限问题。

// Egypt.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include "stdio.h"
#include "math.h"
#include 
using namespace std;
queue q;
int depth  = 0;//解答树深度






bool dfs(double rem, int start, int d)
{
if (fabs(rem) < 0.000001)     //浮点数判断相等
return true;
if (rem < 0)
return false;


int max = (depth - d) / rem;      //剪枝,确定每一层的宽度
for (int i = start; i <= max; i++)
{
if (i == 2)
printf("");
if (i == 6)
printf("");
if (dfs(rem - 1.0 / i, i+1, d+1))
{
printf("%d ", i);
return true;
}
}


return false;
} 



int main(int argc, char* argv[])
{


int a;
int b;
scanf("%d %d",&a,&b);


while(!dfs(1.0 * a / b,2, 0))
depth++;
return 0;
}


你可能感兴趣的:(迭代加深+剪枝)