算法第五章实践报告
2021/12/16 22:16:56
本文主要是介绍算法第五章实践报告,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 请用回溯法的方法分析“最小重量机器设计问题
#include <iostream>
using namespace std;
int n,m,d;
int w[40][40];//重量
int c[40][40];//价格
int bestx[40];//最优解
int x[40];//当前解
int cw=0,cc=0,mw=9999999;//当前重量 当前价格 当前解
void Backtrack(int depth){
if(depth>n){//找到根节点
if(cw<mw){//当前值小于最小值
for(int i=1;i<=n;i++)
bestx[i]=x[i];
mw=cw;
}
return;
}
for(int i=1;i<=m;i++){ //m个商店对应n层分叉树
x[depth]=i;
cc+=c[depth][i];
cw+=w[depth][i];
if(cc<=d&&cw<mw){// 当前价格小于最优价格 当前重量小于最优重量
Backtrack(depth+1);
}
x[depth]=0;//回溯 更新信息
cc-=c[depth][i];
cw-=w[depth][i];
}
}
int main(){
cin>>n>>m>>d;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>c[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>w[i][j];
}
}
Backtrack(1);
cout<<mw<<endl;
for(int i=1;i<=n;i++){
cout<<bestx[i]<<" ";
}
return 0;
}
1.1 说明“最小重量机器设计问题"的解空间
对于每一种部件,都有不同的供应商进行选择,而每一个供应商都有对应的重量w和价格c。
1.2 说明 “最小重量机器设计问题"的解空间树
1.3 在遍历解空间树的过程中,每个结点的状态值是什么
对每一个节点来说,都有对应的两个指标,分别为其在选择了t个供应商后的总价格和总重量。
2. 你对回溯算法的理解
我理解的回溯法,主要用的是深度优先遍历,它把问题的解空间转化成了图或者树的结构表示。首先从根节点出发搜索解空间树,当算法搜索至解空间树的某一节点时,先利用剪枝函数判断该节点是否能得到问题的解。如果不可行,则跳过以该节点为根的子树的搜索,逐层向其祖先节点回溯;否则,进入该子树,继续按深度优先策略搜索。
这篇关于算法第五章实践报告的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南