1,课程安排,第5章 回溯法习题课,3,第5章 回溯法习题,子集和问题 最小长度电路板排列问题 最小重量机器设计问题 运动员最佳匹配问题 无分隔符字典问题 无和集问题 n色方柱问题 整数变换问题 拉丁矩阵问题 排列宝石问题 重复拉丁矩阵问题 罗密欧与朱丽叶的迷宫问题 工作分配问题 独立钻石跳棋问题 智力拼图问题 布线问题 最佳调度问题 无优先级运算问题,世界名画陈列馆问题 世界名画陈列馆问题(不重复监视) 魔方问题 魔方(Rubik’s Cube)问题 算24点问题 算m点问题 双轨车皮编序问题 多轨车皮编序问题 部落卫队问题 虫蚀算式问题 完备环序列问题 离散01串问题 喷漆机器人问题 子集树问题 0-1背包问题 排列树问题 一般解空间搜索问题 最短加法链问题 n2-1谜问题,4,第5章 回溯法习题,子集和问题 运动员最佳匹配问题 最佳调度问题 离散01串问题,5,子集和问题的一个实例为〈S,t〉。其中,S={ x1,x2,…,xn} 是一个正整数的集合,c是一个正整数。 子集和问题判定是否存在S 的一个子集S1,使得 试设计一个解子集和问题的回溯法。 编程任务: 对于给定的正整数的集合S={ x1,x2,…,xn}和正整数c,编程计算S 的一个子集S1,使得,5-1 子集和问题,6,子集和问题,数据输入: 第1行有2个正整数n和c,n表示S的大小,c是子集和的目标值。接下来的1 行中,有n个正整数,表示集合S 中的元素。 结果输出: 输出子集和问题的解。当问题无解时,输出“No solution! ”。 输入示例 5 10 2 2 6 5 4 输出示例 2 2 6,7,子集和问题算法,类似于装载问题 bool Subsum::backtrack(int i) { //从1开始调用 if (in) { //计算完毕 for (int j=1; j=n; j++) bestx[j] = x[j]; //记录最优解 bestw = cw; if (bestw==c) return true; //满足条件(找到了) else return false; },8,子集和问题算法,r -= w[i]; //剩余大小 if (cw+w[i]bestw) {//上界函数 x[i] = 0; //右子树 if (backtrack(i+1)) return true; } r += w[i]; //右子树无最优解 return false; },9,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] 。 设计一个算法,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。,10,运动员最佳匹配问题,编程任务: 设计一个算法,对于给定的男女运动员竞赛优势,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。 数据输入: 第一行有1 个正整数n (1≤n≤20)。接下来的2n 行,每行n 个数。前n 行是p,后n 行是q。 结果输出: 男女双方竞赛优势的总和的最大值。,输入示例: 3 10 2 3 2 3 4 3 4 5 2 2 2 3 5 3 4 5 1,输出示例: 52,p,q,11,运动员最佳匹配问题,结果输出: 男女双方竞赛优势的总和的最大值。 样例分析,输入示例: 3 10 2 3 2 3 4 3 4 5 2 2 2 3 5 3 4 5 1,输出示例: 52,p,q,,,,,,,r,10*2+4*5+4*3=52,,,,,,只有一个下标是变化的,12,运动员最佳匹配问题算法,解空间是一棵排列树 void pref::Backtrack(int t) { //从1开始回溯 if (tn) 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]); //将结点还回去 } },13,运动员最佳匹配问题算法,void pref::Compute(void) { //计算当前排列的竞赛优势 for (int i=1,temp=0;ibest) { //是更好的值? best = temp; for (int i=1; i=n; i++) //构造最优解 bestr[i] = r[i]; } },14,运动员最佳匹配问题算法,15,运动员最佳匹配问题算法,main()中的前半部分:,16,5-17 最佳调度问题,假设有n 个任务由k 个可并行工作的机器完成。完成任务i 需要的时间为ti。试设计一个算法找出完成这n 个任务的最佳调度,使得完成全部任务的时间最早。 编程任务: 对任意给定的整数n 和k,以及完成任务i 需要的时间为ti,i=1~n 。编程计算完成这n个任务的最佳调度。,17,最佳调度问题,数据输入: 第一行有2 个正整数n 和k。第2 行的n 个正整数是完成n 个任务需要的时间。 结果输出: 完成全部任务的最早时间。 输入示例 7 3 2 14 4 16 6 5 3 输出示例 17,18,4.7 多机调度问题,按算法greedy产生的作业调度如下图所示,所需的加工时间为17。 最长处理时间作业优先, 机器空闲时间最长优先安排,19,最佳调度问题算法,void search(int dep) { //初值为1 if (dep==n) { //形成一种调度方案 int temp = comp(); //计算完成任务的时间 if (tmpbest) best = tmp; //更新最优解 return; } for (int i=0; ik; i++) { //对每台机器回溯 len[i] += t[dep]; //安排任务dep(左子树) if (len[i]best) search(dep+1); len[i] -= t[dep]; //右子树 } },20,最佳调度问题算法,计算完成任务的时间 int comp() { int tmp = 0; //在k台机器中查找最大值 for (int i=0; itmp) tmp = len[i]; return tmp; },21,5-30 离散01串问题,(n,k)01 串定义为:长度为n 的01 串,其中不含k 个连续的相同子串。对于给定的正整数n 和k,计算(n,k)01 串的个数。 编程任务: 对于给定的正整数n 和k,计算(n,k)01 串的个数。 数据输入: 第一行有2 个正整数n 和k,1≤k,n≤40。 结果输出: (n,k)01 串的个数。 输入示例 2 3 输出示例 4,3 3 → 6 3 → 10 3 → 16,22,5-30 离散01串问题,具有对称性,只要考察首字符为0的情况,将找到的符合条件的0-1串的个数加倍。 void backtrack(int lev) { //lev从2开始 if (levn) { //一种情况构造完毕 tot += 2; //个数加倍 return ; } for (int i=0; i2; i++) { bstr[lev] = i; // 0,1 //满足条件就回溯 if ( bstrok(lev) ) backtrack(lev+1); } },23,5-30 离散01串问题,bool bstrok(int lev) { //第lev位 for (int i=0; i0) { //下标必须大于0 if (same()) return false; //是相同的 for (int i=0; ik; i++) x[i] -= i+1; //每隔i个位置 } return true; },24,5-30 离散01串问题,//判断是否相同 bool same() { int len = x[0] - x[1]; //计算位置差 for (int i=0; ilen; i++) //搜索每一位 for (int j=1; jk; j++) //每次搜索k位 if (bstr[x[j]+i]!=bstr[x[j-1]+i]) //相邻位 return false; //只要有一个不相同即可 return true; //相同 },25,5-30 离散01串问题,文件头: #include using namespace std; int n, k; int tot; short *bstr; int *x; bool bstrok(int lev); bool same();,

展开阅读全文

c语言最短加法链问题回溯法,《回溯法习题》PPT课件.ppt相关推荐

  1. 计算方法(c语言版)靳天飞答案,《数值分析教程》PPT课件.ppt

    <<数值分析教程>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<数值分析教程>PPT课件.ppt(47页珍藏版)>请在装配图网上搜索. 1.计 ...

  2. c语言用分支结构判断最大字符,第3章C语言 分支结构PPT课件.ppt

    <第3章C语言 分支结构PPT课件.ppt>由会员分享,可在线阅读,更多相关<第3章C语言 分支结构PPT课件.ppt(36页珍藏版)>请在人人文库网上搜索. 1.第三章 分支 ...

  3. c语言拆字程序2000h单元,《C51运算符》PPT课件.ppt

    <<C51运算符>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<C51运算符>PPT课件.ppt(22页珍藏版)>请在装配图网上搜索. 1.单 ...

  4. C语言输入Aa1Bb2Cc3,《C语言基础知识》PPT课件.ppt

    <C语言基础知识>PPT课件.ppt 1,数据结构与算法C语言的基础知识,2,主要内容,C语言简介数据类型与声明运算符与表达式数组指针结构体,3,简单的C语言源程序,#includestd ...

  5. c语言基础知识点总结ppt,《C语言基础知识》PPT课件.ppt

    <<C语言基础知识>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<C语言基础知识>PPT课件.ppt(29页珍藏版)>请在人人文库网上搜索. ...

  6. 模数转换实验中断方式c语言,《数模和模数转换》PPT课件.ppt

    <<数模和模数转换>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<数模和模数转换>PPT课件.ppt(35页珍藏版)>请在装配图网上搜索. 1 ...

  7. c语言链表ppt,C语言链表ppt课件.ppt

    C语言链表ppt课件.ppt 第十一章 链表,1,例跳马.依下图将每一步跳马之后的位置x,y放到一个"结点"里,再用"链子穿起来",形成一条链,相邻两结点间用一 ...

  8. 环评3c语言编写多河段bod-do耦合矩阵模型源程序,《环境质量评价学》PPT课件.ppt...

    <<环境质量评价学>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<环境质量评价学>PPT课件.ppt(38页珍藏版)>请在人人文库网上搜索. ...

  9. c语言结构体与共同体课件,《结构体与共同体》PPT课件.ppt

    <<结构体与共同体>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<结构体与共同体>PPT课件.ppt(44页珍藏版)>请在装配图网上搜索. 1 ...

最新文章

  1. CSDN插件限时内测,新用户抢永久免费去广告特权!
  2. 【性能优化】小伙伴问我性能指标监控怎么做,这次我安排上了!!
  3. 每日一皮:当你感觉上升瓶颈的时候,不妨换个环境...
  4. boost::describe模块宏BOOST_DESCRIBE_PP_NAME的测试程序
  5. PyTorch入门-自然语言分类任务
  6. DeOccNet:国防科大提出阵列相机去除前景遮挡成像新方法
  7. 获取当前 服务 路径 .net
  8. 算法高级(37)-微信、微博中的好友关系该如何设计?
  9. python 网站模板_使用Python抓取模板之家的CSS模板
  10. (4)ISE14.7 ChipScope使用流程(FPGA不积跬步101)
  11. https证书相关概念
  12. nginx ---- nginx服务器版本升级和新增模块
  13. 数据结构:八皇后、N皇后
  14. J2ME开发模拟器KEmulator简介及使用
  15. FreeSWITCH学习
  16. Error serializing object. Cause: java.io.NotSerializableException: com.qi
  17. 美团相关的scheme
  18. 利用python构建马科维茨_R语言动量和马科维茨Markowitz投资组合(Portfolio)模型实现...
  19. Neural Approaches to Conversational AI
  20. 初学深度学习笔记(小土堆和霹雳吧啦)

热门文章

  1. (87)--Python数据分析:指数密度函数与指数分布图
  2. PowerBI的中国地图制作流程
  3. JEECG 4.0版本发布,基于代码生成器的JAVA快速开发平台
  4. linux下u盘分区合并,linux下给U盘分区并制作文件系统-u盘文件系统
  5. 详细盘点清华姚班 智班,北大 浙大图灵班等多所高校AI专业实力!
  6. Postman工具详解
  7. 华为模拟器ensp——VLAN的配置
  8. 音质比较好的蓝牙耳机有哪些?四款音质好的蓝牙耳机推荐
  9. ZR138斑马打印机在ios上的实践
  10. 很小的文件excel2019内存不足