zoukankan      html  css  js  c++  java
  • 背包问题的C语言实现

    参考一个既有的算法实现了背包问题,算法思路见程序注释。

    View Code
     1 /*
    2 * Fredric 2012-3-27
    3 * 背包问题
    4 */
    5 #include <stdio.h>
    6 #include <stdlib.h>
    7
    8 #define N (100)
    9
    10 typedef enum E_STATUS{
    11 E_STATUS_NO,
    12 E_STATUS_YES,
    13 };
    14
    15 typedef struct tagNode{
    16 double weight;
    17 double value;
    18 }stNode;
    19
    20 int num = 6;
    21 stNode gNode[N] = {{5,4},{3,4},{2,3},{1,1},{2,2},{3,4}};
    22 E_STATUS etempRes[N]; //临时解
    23 E_STATUS eFinalRes[N]; //最终解
    24
    25
    26 double limitWeight = 14;
    27 double totalValue;
    28 double maxValue;
    29
    30 /*
    31 * 确认第i个背包是否被选择
    32 * i:第i个背包选择的可能;
    33 * weight:当前选择的总重量
    34 * value: 当前选择可能到达的最大价值
    35 *
    36 * 该算法的实现相当于遍历每个背包选中或不选中的所有可能
    37 */
    38 void search(int i, double weight, double value){
    39
    40 //背包i可以被选中
    41 if (gNode[i].weight + weight < limitWeight)
    42 {
    43 etempRes[i] = E_STATUS_YES;
    44 if (i < num){
    45 search(i + 1, gNode[i].weight + weight, value);
    46 }else{
    47 for (int i = 0; i < num; i++)
    48 {
    49 eFinalRes[i] = etempRes[i];
    50 }
    51 maxValue = value;
    52 }
    53
    54 etempRes[i] = E_STATUS_NO;
    55 }
    56
    57 if (value - gNode[i].value > maxValue)
    58 {
    59 if (i < num){
    60 search(i + 1, weight, value - gNode[i].value);
    61 }else{
    62 for (int i = 0; i < num; i++)
    63 {
    64 eFinalRes[i] = etempRes[i];
    65 }
    66
    67 maxValue = value - gNode[i].value;
    68 }
    69 }
    70
    71 return;
    72 }
    73
    74
    75
    76 void main(void)
    77 {
    78
    79 for (int i = 0; i < num; i++)
    80 {
    81 eFinalRes[i] = E_STATUS_NO;
    82 etempRes[i] = E_STATUS_NO;
    83 totalValue += gNode[i].value;
    84 }
    85
    86 search(0, 0.0, totalValue);
    87
    88 for (i = 0; i < num; i++)
    89 {
    90 printf("No.%d status:%d\r\n", i, eFinalRes[i]);
    91 }
    92
    93 system("pause");
    94
    95 return;
    96 }



  • 相关阅读:
    9.11 eventbus
    9.10,,,实现new instanceof apply call 高阶函数,偏函数,柯里化
    9.9 promise实现 写完了传到gitee上面了,这里这个不完整
    9.5cors配置代码
    9.5 jsonp 实现
    9.5 http tcp https总结
    9.3 es6 class一部分 and es5 class 发布订阅
    8.30 cookie session token jwt
    8.30vue响应式原理
    warning: LF will be replaced by CRLF in renard-wx/project.config.json. The file will have its original line endings in your working directory
  • 原文地址:https://www.cnblogs.com/fredric/p/2420143.html
Copyright © 2011-2022 走看看