
c++
c++递归
Liaring
这个作者很懒,什么都没留下…
展开
-
分支限界法最大团问题
【分支限界法】最大团问题给定无向图G=(V, E),其中V是非空集合,称为顶点集;E是V中元素构成的无序二元组的集合,称为边集,无向图中的边均是顶点的无序对,无序对常用圆括号“( )”表示。如果U∈V,且对任意两个顶点u,v∈U有(u, v)∈E,则称U是G的完全子图(完全图G就是指图G的每个顶点之间都有连边)。G的完全子图U是G的团当且仅当U不包含在G的更大的完全子图中。G的最大团是指G中所含顶点数最多的团。如果U∈V且对任意u,v∈U有(u, v)不属于E,则称U是G的空子图。G的空子图U是G的独立原创 2021-06-07 19:50:37 · 1509 阅读 · 0 评论 -
【分支限界法】最大团问题
【分支限界法】最大团问题给定无向图G=(V, E),其中V是非空集合,称为顶点集;E是V中元素构成的无序二元组的集合,称为边集,无向图中的边均是顶点的无序对,无序对常用圆括号“( )”表示。如果U∈V,且对任意两个顶点u,v∈U有(u, v)∈E,则称U是G的完全子图(完全图G就是指图G的每个顶点之间都有连边)。G的完全子图U是G的团当且仅当U不包含在G的更大的完全子图中。G的最大团是指G中所含顶点数最多的团。如果U∈V且对任意u,v∈U有(u, v)不属于E,则称U是G的空子图。G的空子图U是G的独立原创 2021-06-07 19:44:39 · 3219 阅读 · 0 评论 -
【分支限界法】批处理作业调度问题
【分支限界法】批处理作业调度问题给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理,然后由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时间。所有作业在机器2上完成处理的时间和称为该作业调度的完成时间和。批处理作业调度问题要求对于给定的n个作业,制定最佳作业调度方案,使其完成时间和达到最小。例:设n=3,考虑以下实例:这3个作业的6种可能的调度方案是1,2,3;1,3,2;2,1,3;2,3,1;3,1,2;3,2原创 2021-06-07 19:39:39 · 5776 阅读 · 0 评论 -
分支限界法的旅行商问题
分支限界法的旅行商问题(TSP)旅行推销员问题( 英语:Travelling salesman problem, TSP)是这样一个问题:给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。它是组合优化中的一个NP困难问题,在运筹学和理论计算机科学中非常重要。分支限界法在上一篇Blog中我有简单说明,并给出了基于分支界限法的Dijkstra ,这篇文章里介绍一下基于分支限界法的TSP算法。对于TSP,我们需要利用上界和下界来对BFS进行剪枝,通过不断更新上界和下界,尽可原创 2021-06-07 19:35:41 · 2224 阅读 · 0 评论 -
01背包问题
01背包问题一个旅行者有一个最多能装m公斤的背包,现在有n中物品,每件的重量分别是W1、W2、……、Wn,每件物品的价值分别为C1、C2、……、Cn, 需要将物品放入背包中,要怎么样放才能保证背包中物品的总价值最大?算法分析本次采用队列式分支限界法来解决01背包问题,拿到一个物品k存在两个节点:物品放入背包中或物品不放入背包中,根据约束条件舍去无效情况。当前物品k放入背包中时,获取当前最大总价值,下一个物品k+1也存在放入背包和不放入背包中两个节点。当物品k不放入背包时,上个节点的最总价值为当前节点的原创 2021-06-07 19:29:33 · 224 阅读 · 0 评论 -
布线问题 分支限界法
【分支限界法】布线问题印刷电路板将布线区域划分成n×m个方格如图a所示。精确的电路布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案。在布线时,电路只能沿直线或直角布线,如图b所示。为了避免线路相交,已布了线的方格做了封锁标记,其它线路不允穿过被封锁的方格。一个布线的例子:图中包含障碍。起始点为a,目标点为b。解此问题的队列式分支限界法从起始位置a开始将它作为第一个扩展结点。与该扩展结点相邻并且可达的方格成为可行结点被加入到活结点队列中,并且将这些方格标记为1,即从起始方格a到这些方格的原创 2021-06-07 19:27:04 · 2412 阅读 · 0 评论 -
装载问题-分支限界法
装载问题-分支限界法(队列式分支限界法,优先队列式分支限界法)问题描述有n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且问题:是否有一个合理的装载方案,可将这n个集装箱装上这2艘轮船?如果有,找出一种装载方案。例如:当n=3, c1=c2=50(1)若w=[10, 40, 40]可将集装箱1和集装箱2装上第一艘轮船,而将集装箱3装上第二艘轮船;(2)如果w=[20, 40, 40]则无法将这3个集装箱都装上船;队列式分支限界法解装载问题的队列式分支限界法原创 2021-06-07 19:20:41 · 3856 阅读 · 0 评论 -
分支限界法-优先队列-单源最短路径
分支限界法-优先队列-单源最短路径算法思想:分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。给定一个带权有向图G=(V,E),其中每条边的权是非负数。给定V中原创 2021-06-07 19:08:52 · 3908 阅读 · 0 评论 -
最大团问题
最大团问题问题描述给定无向图G=(V, E),其中V是非空集合,称为顶点集;E是V中元素构成的无序二元组的集合,称为边集,无向图中的边均是顶点的无序对,无序对常用圆括号“( )”表示。如果U∈V,且对任意两个顶点u,v∈U有(u, v)∈E,则称U是G的完全子图(完全图G就是指图G的每个顶点之间都有连边)。G的完全子图U是G的团当且仅当U不包含在G的更大的完全子图中。G的最大团是指G中所含顶点数最多的团。如果U∈V且对任意u,v∈U有(u, v)不属于E,则称U是G的空子图。G的空子图U是G的独立集当原创 2021-06-02 19:13:45 · 1118 阅读 · 0 评论 -
圆排列问题
圆排列问题问题描述:给定n个大小不等的圆 c1 c2 c3 c4 要将n个圆排进一个矩形框中,且要求底边相切。找出有最小长度的圆排列。例如:当n=3,且所给的3个圆半径分别为1,1,2时,这3个圆的最小长度的圆排列 最小长度为2+4根号2.// Circle.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>template<class Type>class Circle{ template原创 2021-06-02 19:09:21 · 354 阅读 · 0 评论 -
旅行商问题
旅行商问题问题描述某售货员要到若干城市去推销商品,已知各城市之间的路程(旅费),他要选定一条从驻地出发,经过每个城市一遍,最后回到驻地的路线,使总的路程(总旅费)最小。// Traveling.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>using namespace std;template<class Type>class Traveling{ friend void TSP(原创 2021-06-02 19:07:08 · 250 阅读 · 0 评论 -
图的m着色问题
图的m着色问题问题描述给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色。这个问题是图的m可着色判定问题。若一个图最少需要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数m为该图的色数。求一个图的色数m的问题称为图的m可着色优化问题。四色猜想:四色问题是m图着色问题的一个特例,根据四色原理,证明平面或球面上的任何地图的所有区域都至多可用四种、颜色来着色,并使任何两个有一段公共边界的相邻区域没有相同的颜色。这个原创 2021-06-02 19:04:07 · 988 阅读 · 0 评论 -
最大团问题
最大团问题问题描述 给定无向图G=(V, E),其中V是非空集合,称为顶点集;E是V中元素构成的无序二元组的集合,称为边集,无向图中的边均是顶点的无序对,无序对常用圆括号“( )”表示。如果U∈V,且对任意两个顶点u,v∈U有(u, v)∈E,则称U是G的完全子图(完全图G就是指图G的每个顶点之间都有连边)。G的完全子图U是G的团当且仅当U不包含在G的更大的完全子图中。G的最大团是指G中所含顶点数最多的团。 如果U∈V且对任意u,v∈U有(u, v)不属于E,则称U是G的空子图。G的空子图U是G的独立原创 2021-06-02 19:00:25 · 360 阅读 · 0 评论 -
0-1背包问题
0-1背包问题问题描述:给定 n 个物品和一个容量为 C 的背包,请 给出物品装入背包的方案,使得背包中物品的总价值 M 最大,并 满足:• 每个物品 I 的重量为 w i ,价值为 v i 。• 每个物品不可拆分,要么完整装入背包,要么不在背包里。• 背包中物品的总重量不能超过容量 C 。// Pack.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>template<class Type>c原创 2021-06-02 18:57:48 · 129 阅读 · 0 评论 -
n皇后问题
n皇后问题问题描述:N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击)。输入皇后数n,输出解,并且打印出n个皇后的坐标。// Queen.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include<stdlib.h>template<class Type>class Queen{public原创 2021-06-02 18:52:19 · 246 阅读 · 0 评论 -
批处理作业调度
批处理作业调度1、问题描述每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和f=F2i,称为该作业调度的完成时间和对于给定的n个作业,指定最佳作业调度方案,使其完成时间和达到最小。区别于流水线调度问题:批处理作业调度旨在求出使其完成时间和达到最小的最佳调度序列;// PermutationTree.cpp : 此文件包原创 2021-06-02 18:47:19 · 953 阅读 · 0 评论 -
装载问题子集树回溯
装载问题问题描述:有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且,装载问题要求确定是否有一个合理的装载方案可将这些集装箱装上这2艘轮船。如果有,找出一种装载方案。 例如:当n=3,c1=c2=50,且w=[10,40,40]时,则可以将集装箱1和2装到第一艘轮船上,而将集装箱3装到第二艘轮船上;如果w=[20,40,40],则无法将这3个集装箱都装上轮船。基本思路: 容易证明,如果一个给定装载问题有解,则采用下面的策略可得到最优装载方案。(1)首先将第一艘原创 2021-05-31 19:11:50 · 393 阅读 · 0 评论 -
非递归的子集树公式
非递归的子集树公式void IterativeBacktrack(void){ int t = 1; while (t > 0) { if (f(n, t) > g(n, t)) { for (i = f(n, t; i < g(n, t)) //这里需要个一个变量来保存需要的t //x[t]=i if (constrai原创 2021-05-31 19:06:43 · 138 阅读 · 0 评论 -
排列树的递归公式
递归排列树的递归公式void Bactrack(int t){ if (t > n) outPut(); else{ for (i = f(n, t); i < g(n, t); i++){ swap(x[t],i); //这里需要个一个变量来保存需要的t //x[t]=i if (constraint(t) && Bound(t))原创 2021-05-31 19:05:00 · 179 阅读 · 0 评论 -
子集树递归公式
子集树递归的基本公式void Bactrack(int t){ if (t > n) outPut(); else { for (i = f(n, t); i < g(n, t); i++) //这里需要个一个变量来保存需要的t //x[t]=i if (constraint(t) && Bound(t))//constrain是约束函数 Boun原创 2021-05-31 18:56:26 · 221 阅读 · 0 评论