回溯法求不等式的所有整数解

这份代码本来是用来解决这个问题的

但是,修改之后即可用来解决任意多个xi组成的满足不等式的整数解

回溯法求不等式的所有整数解_第1张图片

这里用真代码而不是伪代码来表示

源代码:

#include
using namespace std;
const int N=1010;
int p,q,r,goal,n;
int cnt,sum,MIN;
int A[N],t[N],s[5];
int Min(int a,int b,int c)
{
	int t=a<=b?a:b;
	return t<=c?t:c;
}
void solve(int k)
{	
	//i代表x取值 
	for(int i=0;i<=goal/MIN;i++)//注意i从0开始 
	{
		t[cnt++]=i;
		
//		int total=0;
//		for(int j=0;j>p>>q>>r>>goal;
	
	s[1]=p,s[2]=q,s[3]=r;
	
	MIN=Min(p,q,r);
	
	for(int i=1;i<=goal;i++) A[i]=i;
	
	solve(1);
	
	return 0;	
} 

运行结果:

回溯法求不等式的所有整数解_第2张图片

回溯法求不等式的所有整数解_第3张图片

可以看到,这些解都是正确的。

现在做简单修改,把输入n和p,q,r的部分修改一下,即可用来解决任意多个自变量xi的不等式

(根据自变量个数修改N的值,如果自变量个数大于原来的N值1010)

注意修改之后s数组下标从1开始,因为这个下标和solve的递归层数(从第一层开始)相关联

	//n=3;
	
	//cin>>p>>q>>r>>goal;
	
	//s[1]=p,s[2]=q,s[3]=r;

    cin>>n>>goal;

    //注意这里下标从1开始,因为这个下标和solve的递归层数(从第一层开始)相关联
    for(int i=1;i<=n;i++) cin>>s[i];

最后,再把MIN函数修改一下即可

你可能感兴趣的:(算法)