日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++——《算法分析》实验伍——箱子装载问题

發布時間:2025/3/15 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++——《算法分析》实验伍——箱子装载问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗目的
1、理解和復習所學各種算法的概念;
2、 掌握和復習所學各種算法的基本要素;
3、 掌握各種算法的優點和區別;
4、 通過應用范例掌握選擇最佳算法的設計技巧與策略;

實驗原理
1、貪心算法首先排序集裝箱,不斷挑選相對重的加入數組
2、回溯法構建二叉樹,通過判斷建立左右子樹并不斷剪枝求得可行解并比較出最優解

實驗內容
1、使用貪心算法、回溯法、分支限界法解決箱子裝載問題。(任選兩種)
2、通過上機實驗進行算法實現。
3、保存和打印出程序的運行結果,并結合程序進行分析,上交實驗報告。

源程序:
回溯法:

#include <cstdio> #include <iostream> using namespace std; int n; //集裝箱數 int cw; // 當前重量 int bestw; //最優重量 int c1; //第一艘輪船的載重量 int c2; //第二艘輪船的載重量 int x[100]; //解 int bestx[100]; //最優解 int w[100]; //重量void load(int t) {if (t > n){if (cw > bestw){bestw = cw;for (int i = 0; i < n; i++)bestx[i] = x[i];}return;}else {if (cw + w[t] <= c1) {cw += w[t];x[t] = 1;load(t + 1);x[t] = 0;cw -= w[t];}int rw = 0;for (int i = t + 1; t <= n; t++) rw += w[i];if ((rw + cw) > bestw) {load(t + 1);} } }int main() {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];cw = 0;bestw = 0;load(1);cout << "第1船的最優載重量為:" << bestw << endl;cout << "第1船的最優解為:";for (int i = 0; i < n; i++) cout << bestx[i]<< " ";cout << endl;int cw2 = 0;for (int i = 0; i < n; i++) if (bestx[i] == 0) cw2 += w[i];if (cw2 > c2) cout << "無法將剩余集裝箱裝入第2船,問題無解"<<endl;else cout << "可以將剩余集裝箱裝入第2船,問題有解"<<endl; }

貪心算法:

#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++——《算法分析》实验伍——箱子装载问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。