计算机算法分析与设计(22)---回溯法(最小重量机器设计问题)

这篇具有很好参考价值的文章主要介绍了计算机算法分析与设计(22)---回溯法(最小重量机器设计问题)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、问题描述

 设某一机器由 n n n 个部件组成,每种部件都可以从 m m m 个不同的供应商处购得。设 w i j w_{ij} wij 是从供应商 j j j 处购得的部件i的重置, c i j c_{ij} cij 是相应的价格。设计一个算法,给出总价格不超过 d d d 的最小重量机器设计。

数据输入:
1 1 1 行有 3 3 3 个正整数 n n n m m m d d d。接下来的 2 n 2n 2n 行,每行 n n n 个数。前 n n n 行是 c c c,后 n n n 行是 w w w
数据输出:
输出计算的最小重量及每个部件的供应商。

二、算法思路

 1. 采用回溯法。因为每个商品可以从 m m m 个供货商获得,则问题的解空间树是一棵 m m m 叉树,该树属于子集树而非排列树。

 2. 然后考虑剪枝条件,此问题中的限制条件为价格上限 c c c,最小重量设 b e s t w bestw bestw,则当前价格 c c < c cc<c cc<c 且 当前重量 c w < b e s t w cw< bestw cw<bestw 时,执行树的深度遍历,否则,执行回溯,因此本问题中包含两个剪枝条件。

 3. 最后是更新最优值,以及问题的解,本题中最优解是 b e s t w bestw bestw,解集合是 x [ i ] x[i] x[i]。递归出口处更新一种最优解,以及对应解集合。

三、代码编写

输入样例:
3 3 4
1 2 3
3 2 1
2 2 2
3 3 4
1 2 3
3 2 1
2 2 2
输出样例:
4
1 3 1

#include<iostream>
using namespace std; 
#define maxn 110
 
int w[maxn][maxn];
int c[maxn][maxn];
int bestx[maxn];
int x[maxn];
int n, m, d;
int cw = 0, cc = 0, bestw = 0x3f3f3f3f;
 
void Backtrack(int t) {
    if (t > n) 
	{
        bestw = cw;
        for (int i = 1; i <= n; i++)
            bestx[i] = x[i];
    }
	else 
	{
        for (int i = 1; i <= m; i++) 
		{
            if (cc + c[t][i] <= d && cw + w[t][i] < bestw) 
			{
                x[t] = i;
                cc += c[t][i];
                cw += w[t][i];
                Backtrack(t + 1);
                cc -= c[t][i];
                cw -= w[t][i];
            }
        }
    }
}
 
int main() {
    cout<<"请依次输入部件数,供应商数,限定价格:" << endl;
    cin>> n >> m >> d;
    
    cout<<"请输入各部件的在不同供应商的重量:" << endl;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin>>w[i][j];
            
    cout<<"请输入各部件的在不同供应商的价格:" << endl;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin>>c[i][j];
            
    Backtrack(1);
    cout<<"最小重量为:" << bestw << endl;
    cout<<"每个部件的供应商:" << endl;
    for (int i = 1; i <= n; i++)
    {
    	if(i==1) cout<<bestx[i]<<" "; 
        else cout<<bestx[i]<<" ";
	}
        
    return 0;
}

计算机算法分析与设计(22)---回溯法(最小重量机器设计问题),计算机算法分析与设计第五版(王晓东),算法,C++,回溯法,最小重量机器设计问题文章来源地址https://www.toymoban.com/news/detail-739544.html

到了这里,关于计算机算法分析与设计(22)---回溯法(最小重量机器设计问题)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机算法分析与设计(14)---贪心算法(会场安排问题和最优服务次序问题)

     假设在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。 数据输入: 第 1 1 1 行中有一个整数 n n n ,表示有 n n n 个待安排的活动。接下来的 n n n 行中,每行有 2 2 2 个正整数,分别表示 n n n 个待安排的活动的开始时间和结束

    2024年02月02日
    浏览(31)
  • 符号三角形-计算机算法设计与分析【1600+字解析 dfs全排列 列举情况】【题意分析】【算法分析】【思路是怎么来的】【过程是什么】

    下图是由14个“+”和14个“-”组成的符号三角形。2个同号下面都是“+”,2个异号下面都是“-”。 在一般情况下,符号三角形的第一行有n个符号。符号三角形问题要求对于给定的n,计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相同。 题意分析 也就是 给

    2024年02月03日
    浏览(30)
  • 计算机毕业设计:基于python招聘数据分析可视化系统+预测算法+爬虫+Flask框架(建议收藏)

    [毕业设计]2023-2024年最新最全计算机专业毕设选题推荐汇总 2023年 - 2024年 最新计算机毕业设计 本科 选题大全 汇总 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人 。 本项目旨在通过使用Python的requests库

    2024年01月23日
    浏览(43)
  • 计算机视觉的几个经典算法 —— 最小二乘法 + RANSAC + 哈希算法(附DCT) + 图像聚类算法

    在了解最小二乘法之前,我们有必要先说说线性回归,所谓线性回归我们最常见的例子y=2x这个一元线性回归方程中,斜率2就是回归系数,它表示的是x变动时,y与之对应的关系,而线性回归就是表示一些离散的点在总体上是最逼近某一条直线的 这跟最小二乘法有啥关系呢?

    2024年02月08日
    浏览(34)
  • 地铁大数据客流分析系统 设计与实现 计算机竞赛

    🔥 优质竞赛项目系列,今天要分享的是 地铁大数据客流分析系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 使用 Flink 完成数据清洗和聚合,使用 Elasticsearch + Kibana 的的技术路线,完成了客流信息

    2024年02月08日
    浏览(31)
  • 计算机竞赛 地铁大数据客流分析系统 设计与实现

    🔥 优质竞赛项目系列,今天要分享的是 地铁大数据客流分析系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 使用 Flink 完成数据清洗和聚合,使用 Elasticsearch + Kibana 的的技术路线,完成了客流信息

    2024年02月11日
    浏览(34)
  • 计算机毕业分享(含算法) 大数据电影数据分析与可视化系统

    今天学长向大家介绍一个机器视觉的毕设项目 🚩基于大数据的电影数据分析与可视化系统 项目运行效果(视频): 毕业设计 大数据电影评论情感分析 项目获取: https://gitee.com/sinonfin/algorithm-sharing 研究中国用户电影数据,有助于窥探中国电影市场发展背后的规律,理解其来龙去

    2024年01月24日
    浏览(42)
  • 计算机设计大赛 疫情数据分析与3D可视化 - python 大数据

    🔥 优质竞赛项目系列,今天要分享的是 🚩 大数据全国疫情数据分析与3D可视化 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:2分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/danch

    2024年03月22日
    浏览(42)
  • 计算机设计大赛 深度学习人脸表情识别算法 - opencv python 机器视觉

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习人脸表情识别系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/

    2024年02月21日
    浏览(71)
  • 计算机毕业设计-基于Python的“哔哩哔哩视频网”视频热度分析

      在21世纪的今天,网络发展越来越快,网上的娱乐方式也越来越多样化,而如今在网上观看视频消遣时间越来越受到大众的青睐。Bilibili视频网站是现当下年轻人最受欢迎的一个视频网站。有调查显示,直到2019年的10月份,Bilibili视频网站的用户在总体网络视频用户占比高

    2024年04月08日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包