回溯法 求解裝載問題(類似0 1揹包)

2022-05-04 07:06:08 字數 615 閱讀 4075

要求:採用回溯法

採用剪枝條件

#include #include #include #define maxn 20  //最多貨櫃個數

int n, w,

int maxw; //maxw:存放最優解的總重量

int x[maxn]; //x:存放最優解向量

int minm = 32767; //minm:存放最優解的貨櫃個數,初始為最大值

//考慮第i個貨櫃,tw為考慮第i個貨櫃時裝入的總重量,其裝載解向量為op

void loading(int w, int tw, int m, int op, int i)

} } else

}void dispsolution(int n)

printf("總重量 = %d\n",maxw);

} int main(); //各貨櫃重量,不用下標0的元素

int op[maxn]; //存放臨時解

n = 5, w = 10;

loading(w, 0, 0, op, 1);

dispsolution(n);

}

回溯法求解裝載問題

有n個貨櫃要裝上一艘載重量為w的輪船,其中貨櫃i 1 i n 的重量為wi。不考慮貨櫃的體積限制,現要從這些貨櫃中選出重量和小於等於w並且盡可能大的若干裝上輪船。例如,n 5,w 10,w 時,其最佳裝載方案是 1,1,0,0,1 或者 0,0,1,1,0 maxw 10。採用帶剪枝的回溯法求解。問...

回溯法解裝載問題

遞迴解法 include using namespace std int bestw 0 int cw 0 int num 3 int r 46 int bestx 3 void load int w,int c,int n,int x r w n int main void int x load ...

回溯法,回溯法解裝載問題

利用回溯法解問題時一般按以下三步驟 1 定義問題的解空間 2 確定易於搜尋的解空間結構 3 以深度優先策略搜尋解空間,並在搜尋過程中用剪枝函式避免無效搜尋 二 回溯法應用 裝載問題 一批貨櫃共n個要裝上2艘載重量分別為c1和c2的輪船,其中貨櫃i的重量為wi且w1 w2 wn c1 c2 試確定乙個...