C++——《算法分析》实验伍——箱子装载问题
生活随笔
收集整理的這篇文章主要介紹了
C++——《算法分析》实验伍——箱子装载问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實驗目的:
1、理解和復習所學各種算法的概念;
2、 掌握和復習所學各種算法的基本要素;
3、 掌握各種算法的優點和區別;
4、 通過應用范例掌握選擇最佳算法的設計技巧與策略;
實驗原理
1、貪心算法首先排序集裝箱,不斷挑選相對重的加入數組
2、回溯法構建二叉樹,通過判斷建立左右子樹并不斷剪枝求得可行解并比較出最優解
實驗內容:
1、使用貪心算法、回溯法、分支限界法解決箱子裝載問題。(任選兩種)
2、通過上機實驗進行算法實現。
3、保存和打印出程序的運行結果,并結合程序進行分析,上交實驗報告。
源程序:
回溯法:
貪心算法:
#include <cstdio> #include <cstdlib> #include <iostream> using namespace std; int x[100], w[100],w1[100]; void swap(int& x, int& y) {int t;t = x;x = y;y = t; } void sort(int w[], int n) {int i, j;int last;i = n - 1;while (i > 0){last = 0;for (int j = 0; j < i; j++){if (w[j + 1] > w[j]){swap(w[j + 1], w[j]);last = j;}}i = last;} } void load(int x[], int w[], int c, int n) {sort(w, n);for (int i = 0; i < n; i++) x[i] = 0;for (int j = 0; j < n ; j++) {if (w[j] <= c) {x[j] = 1;c -= w[j];}} }int main() {int n, c1,c2;cout << "貪心算法:" << endl;cout << "第1船載重量為:";cin >> c1;cout << "第2船載重量為:";cin >> c2;cout << "集裝箱個數為:";cin >> n;cout << "集裝箱重量為:" << endl;for (int i = 0; i < n; i++){cin >> w[i]; w1[i] = w[i];}load(x, w, c1, n);int bestw = 0;for (int k = 0; k < n; k++) {if (x[k] == 1) bestw += w[k];}cout << "第1船的最優載重量為:" << bestw << endl;cout << "第1船的最優解為:";for (int i = 0; i < n; i++){int count = 0;for (int j = 0; j < n; j++){if ((w1[i] == w[j]) && (x[j] == 1) && count < 1){cout << "1 ";count++;}else if ((w1[i] == w[j]) && (x[j] == 0) && count < 1){cout << "0 ";count++;}}}cout << endl;int cw2 = 0;for (int i = 0; i < n; i++) if (x[i] == 0) cw2 += w[i];if (cw2 > c2) cout << "無法將剩余集裝箱裝入第2船,問題無解" << endl;else cout << "可以將剩余集裝箱裝入第2船,問題有解" << endl; return 0; }實驗結果:
總結
以上是生活随笔為你收集整理的C++——《算法分析》实验伍——箱子装载问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Delphi的Socket编程要分几步?
- 下一篇: Delphi 中的 Var buffer