回溯算法部落卫队问题c语言,第5章节-回溯法-习题.ppt

第5章节-回溯法-习题

课程安排 第5章 回溯法习题课 第5章 回溯法习题 子集和问题 最小长度电路板排列问题 最小重量机器设计问题 运动员最佳匹配问题 无分隔符字典问题 无和集问题 n色方柱问题 整数变换问题 拉丁矩阵问题 排列宝石问题 重复拉丁矩阵问题 罗密欧与朱丽叶的迷宫问题 工作分配问题 独立钻石跳棋问题 智力拼图问题 布线问题 最佳调度问题 无优先级运算问题 世界名画陈列馆问题 世界名画陈列馆问题(不重复监视) 魔方问题 魔方(Rubik’s Cube)问题 算24点问题 算m点问题 双轨车皮编序问题 多轨车皮编序问题 部落卫队问题 虫蚀算式问题 完备环序列问题 离散01串问题 喷漆机器人问题 子集树问题 0-1背包问题 排列树问题 一般解空间搜索问题 最短加法链问题 n2-1谜问题 第5章 回溯法习题 子集和问题 运动员最佳匹配问题 最佳调度问题 离散01串问题 5-1 子集和问题 子集和问题的一个实例为〈S,t〉。其中,S={ x1,x2,…,xn} 是一个正整数的集合,c是一个正整数。 子集和问题判定是否存在S 的一个子集S1,使得 试设计一个解子集和问题的回溯法。 编程任务: 对于给定的正整数的集合S={ x1,x2,…,xn}和正整数c,编程计算S 的一个子集S1,使得 子集和问题 数据输入: 第1行有2个正整数n和c,n表示S的大小,c是子集和的目标值。接下来的1 行中,有n个正整数,表示集合S 中的元素。 结果输出: 输出子集和问题的解。当问题无解时,输出“No solution! ”。 输入示例 5 10 2 2 6 5 4 输出示例 2 2 6 子集和问题算法 类似于装载问题 bool Subsum::backtrack(int i) {//从1开始调用 if (i>n) {//计算完毕 for (int j=1; j<=n; j++) bestx[j] = x[j];//记录最优解 bestw = cw; if (bestw==c) return true;//满足条件(找到了) else return false; } 子集和问题算法 r -= w[i];//剩余大小 if (cw+w[i]<=c) {//第i个数可以使用 x[i] = 1;//左子树 cw += w[i];//当前和加上w[i] if (backtrack(i+1)) return true; cw -= w[i]; //准备进入右子树 } if (cw+r>bestw) {//上界函数 x[i] = 0;//右子树 if (backtrack(i+1)) return true; } r += w[i];//右子树无最优解 return false; } 5-4 运动员最佳匹配问题 问题描述: 羽毛球队有男女运动员各n 人。 给定2 个n×n 矩阵P 和Q。P[i][j] 是男运动员i 和女运动员j 配对组成混合双打的男运动员竞赛优势;Q[i][j] 是女运动员i 和男运动员j 配合的女运动员竞赛优势。 由于技术配合和心理状态等各种因素影响,P[i][j] 不一定等于Q[j][i] 。 男运动员i 和女运动员j 配对组成混合双打的男女双方竞赛优势为P[i][j]*Q[j][i] 。 设计一个算法,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。 运动员最佳匹配问题 编程任务: 设计一个算法,对于给定的男女运动员竞赛优势,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。 数据输入: 第一行有1 个正整数n (1≤n≤20)。接下来的2n 行,每行n 个数。前n 行是p,后n 行是q。 结果输出: 男女双方竞赛优势的总和的最大值。 运动员最佳匹配问题 结果输出: 男女双方竞赛优势的总和的最大值。 样例分析 运动员最佳匹配问题算法 解空间是一棵排列树 void pref::Backtrack(int t) {//从1开始回溯 if (t>n) Compute();//构成1次全排列 else for (int j=t; j<=n; j++) {//从结点t到叶结点 swap(r[t], r[j]);//将结点j作为当前结点 Backtrack(t+1); swap(r[t], r[j]);//将结点还回去 } } 运动员最佳匹配问题算法 void pref::Compute(void) {//计算当前排列的竞赛优势 for (int i=1,temp=0;i<=n;i++)//按题目要求计算 temp +=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值