首页 > 其他 > 详细

装书包问题:从不同重量书中选任意本装入书包,刚好达到书包限重

时间:2014-02-05 12:29:42      阅读:328      评论:0      收藏:0      [点我收藏+]

装书包问题:

从不同重量书中选任意本装入书包,刚好达到书包限重;

1,mony[ ]存放多种不同重量的书;

2,书包限重sum;

3,从mony[ ]中选取任意组合,使总重恰好等于sum;

4,输出所有可能组合;

bubuko.com,布布扣
#include<stdlib.h>
#include<stdio.h>

int sum=10;
//计算mony中所有能组成sum的元素组合,元素不得重复,输出所有组合情况
//start为遍历数组mony[]的起始位置:
void FUN(int mony[],int len,int ret[],int start){//len是mony长度
        if(ret[len]>sum) return;
        if(ret[len]==sum){//ret[]最后一位存和数
                int i=0;
                for(;i<=len;i++){
                        if(ret[i]!=0){
                                printf("----%d",ret[i]);
                        }
                }
                printf("\n");
                return;
        }
        int i=start;
        for(;i<len;i++){
                ret[i]=mony[i];//保存路径
                ret[len]+=mony[i];//ret最后一位存和数
                FUN(mony,len,ret,i+1);
                ret[i]=0;//返回上一步恢复路径
                ret[len]-=mony[i];//返回上一步恢复和数
        }
}

int main()
{
        int money[]={1,3,5,2,4};
        int ret[5+1]={0};
        FUN(money,5,ret,0);
        return 0;
}       
~    
bubuko.com,布布扣

输出结果如下:

xu@xu-ThinkPad-X61:~/algorithm$ ./exe beibaobuchfu.c

----1----3----2----4----10
----1----5----4----10
----3----5----2----10

装书包问题:从不同重量书中选任意本装入书包,刚好达到书包限重

原文:http://www.cnblogs.com/McQueen1987/p/3538123.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!