您的位置:首页 > 其它

回溯法-子集和数问题

2011-03-24 23:13 211 查看
/*
回溯法-子集和数问题
*/
#include <stdio.h>
int M,n;
int w[100];
int x[100];
void SumOfSub(int s, int k, int r)
{
//s=w[1]*x[1]+...+w[k-1]*x[k-1]
//r=w[k]+...w

//w[i]需要按非降次序排列
int i;
x[k]=1;
for(i=1; i<=k; i++)
printf("%d", x[i]);
printf("/n");
if(s+w[k]==M) //子集找到
{
printf("ans:");
for(i=1; i<=k; i++)
printf("%d", x[i]);
printf("/n");
}else if(s+w[k]+w[k+1]<=M)
SumOfSub(s+w[k], k+1, r-w[k]);

if(s+r-w[k]>=M && s+w[k+1]<=M)
{
x[k]=0;
SumOfSub(s, k+1, r-w[k]);
}
}
int main()
{
int s,k,r;
n=4;
w[1]=7;
w[2]=11;
w[3]=13;
w[4]=24;
M=31;

s=0;
k=1;
r=55;

SumOfSub(s, k, r);
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: