运筹学匈牙利算法示例
匈牙利算法示例ppt

7 ◎ 2 Ø 2 4 3 ◎ Ø Ø Ø 8 3 5 ◎ 11 8 Ø ◎ 4 ◎ 4 1 4 3
或
7 ◎ 2 Ø 2 4 3 Ø◎ Ø Ø 8 3 5 ◎ 11 8 ◎ Ø 4 4 1 4 3 ◎
要求每人做一项工作,约束条件为
x
j 1
n
ij
1
(i 1, 2, , n)
要求每项工作只能安排一人,约束条件为
x
i 1
n
ij
1
( j 1, 2, , n)
变量约束为
xij 0或1
(i, j 1, 2,3, 4)
下表所示效率矩阵的指派问题
时间 任务 人员
A
12 8 7
bij
12 8 (cij ) 7 15 4
7 9 17 14 10
9 7 9 6 6 6 12 14 9 6 6 10 7 10 9
5 0 2 0 2 3 0 0 0 10 5 7 9 8 0 0 0 6 3 6
2 0 2 4 5
5 0 2 0 2 3 0 0 0 10 5 7 9 8 0 0 0 6 3 6
2 0 2 4 5
5 2 ◎ 9 Ø
◎
3 10 8 6
2 Ø Ø ◎ 5 7 2 ◎ Ø 4 3 6 5 2
Ø
第三步;作最少的直线覆盖所有0元素,以确 定该系数矩阵中能找到最多的独立元素数。 (1)对没有◎的行打√ (2)在已经打√的行中所含有的0元素打√号(3) √ 在已经打√号的列中含◎元素的行打√;(4)重复 (2)(3)直到得不出打√的行列为止(5)对没有 打√的行画一横线,有打√的列画一纵线,这就覆盖 所有0元素的最少直线数。令这一直线数为l。若 l<n,说明必须再换当前的系数矩阵,才能找到n个 独立的0元素,为此转到第四步;若l=n,而m<n, 应回到(2)(4)另行试探。
运筹学匈牙利法

运筹学匈牙利法运筹学匈牙利法(Hungarian Algorithm),也叫匈牙利算法,是解决二部图最大(小)权完美匹配(也称作二分图最大权匹配、二分图最小点覆盖)问题的经典算法,是由匈牙利数学家Kuhn和Harold W. Kuhn发明的,属于贪心算法的一种。
问题描述在一个二分图中,每个节点分别属于两个特定集合。
找到一种匹配,使得所有内部的节点对都有连边,并且找到一种匹配方案,使得该方案的边权和最大。
应用场景匈牙利算法的应用场景较为广泛,比如在生产调度、货车调度、学生对导师的指定、电影的推荐等领域内,都有广泛的应用。
算法流程匈牙利算法的伪代码描述如下:进行循环ɑ、选择一点未匹配的点a作为起点,它在二分图的左边β、找出a所有未匹配的点作为下一层节点ɣ、对下一层的每个节点,如果它在右边未匹配,直接匹配ɛ、如果遇到一个已经匹配的节点,进入下一圈,考虑和它匹配的情况δ、对已经匹配的点,将它已经匹配的点拿出来,作为下一层节点,标记这个点作为已被搜索过ε、将这个点作为当前层的虚拟点,没人配它,看能否为它找到和它匹配的点ζ、如果能匹配到它的伴侣,令它们成对被匹配最后输出最大权匹配。
算法优缺点优点:相比于暴力求解二分图最大权匹配来说,匈牙利算法具有优秀的解决效率和高效的时间复杂度,可以在多项式时间(O(n^3))内解决二分图最大权匹配问题。
缺点:当二分图较大时,匈牙利算法还是有很大的计算复杂度,复杂度不佳,算法有效性差。
此时就需要改进算法或者使用其他算法。
总结匈牙利算法是一个常见的解决二分图最大权匹配问题的算法,由于其简洁、易用、效率优秀等特性,广泛应用于学术和实际问题中。
匈牙利算法虽然在处理较大规模问题时效率不佳,但仍然是一种值得掌握的经典算法。
匈牙利算法 描述

匈牙利算法一、算法概述匈牙利算法是一种解决二分图最大匹配问题的经典算法,由匈牙利数学家DénesKőnig于1931年提出。
二分图是指图中的节点可以分为两个互不相交的集合,并且图中的边只能连接两个集合中的节点。
最大匹配问题是在二分图中找到最大的边集合,使得每个节点都只与一条边相连。
匈牙利算法通过不断寻找增广路径来寻找最大匹配。
增广路径是指一条路径,其起点和终点都不属于当前的匹配边集合,并且路径中的边交替属于匹配边和非匹配边。
通过不断寻找增广路径,匈牙利算法可以将非匹配边转化为匹配边,从而逐步增大匹配边集合的大小,直到无法找到增广路径为止。
二、算法步骤匈牙利算法的基本思路是通过深度优先搜索来寻找增广路径。
具体步骤如下:1. 初始化将所有节点的匹配状态设为未匹配。
2. 寻找增广路径从一个未匹配节点开始,进行深度优先搜索,寻找增广路径。
在搜索过程中,每次选择一个未匹配的邻接节点进行继续搜索,直到找到一条增广路径或者无法继续搜索为止。
3. 更新匹配边集合如果找到了增广路径,就将路径中的非匹配边转化为匹配边,同时将原来的匹配边转化为非匹配边。
然后回到第2步,继续寻找下一个增广路径。
4. 输出最大匹配当无法找到增广路径时,算法结束。
此时,最大匹配就是匹配边集合中的边。
三、算法示例为了更好地理解匈牙利算法,下面以一个具体的示例来说明。
假设有一个二分图,左侧的节点集合为A,右侧的节点集合为B,边集合为E。
图中的边表示两个节点之间的关系。
A = {a1, a2, a3}B = {b1, b2, b3}E = {(a1, b1), (a1, b2), (a2, b1), (a3, b2), (a3, b3)}初始时,所有节点的匹配状态都为未匹配。
1. 寻找增广路径从一个未匹配的节点开始,进行深度优先搜索,寻找增广路径。
假设从节点a1开始,我们找到了一条增广路径:a1-b1-a2-b2-a3。
2. 更新匹配边集合将路径中的非匹配边转化为匹配边,同时将原来的匹配边转化为非匹配边。
匈牙利算法详细步骤例题

匈牙利算法详细步骤例题
嘿,朋友们!今天咱就来讲讲这神奇的匈牙利算法。
你可别小瞧它,这玩意儿在好多地方都大有用处呢!
咱先来看个具体的例子吧。
就说有一堆任务,还有一堆人,要把这
些任务分配给这些人,怎么分才能最合理呢?这时候匈牙利算法就闪
亮登场啦!
第一步,咱得弄个表格出来,把任务和人之间的关系都给标上。
比
如说,这个人干这个任务合适不合适呀,合适就标个高分,不合适就
标个低分。
这就好像给他们牵红线似的,得找到最合适的搭配。
然后呢,开始试着给任务找人。
从第一个任务开始,找个最合适的人。
要是这个人还没被别的任务占着,那太好了,直接就配对成功啦!要是已经被占了呢,那就得看看能不能换一换,让大家都更合适。
就好比是跳舞,你得找到最合适的舞伴,跳起来才带劲嘛!要是随
便找个人就跳,那多别扭呀。
这中间可能会遇到一些麻烦,比如好几个人都对同一个任务感兴趣,那可咋办?这就得好好琢磨琢磨啦,得权衡一下,谁更合适。
有时候你会发现,哎呀,怎么这么难呀,怎么都找不到最合适的搭配。
别急别急,慢慢来,就像解一道难题一样,得一点点分析。
咱再说说这算法的奇妙之处。
它就像是一个聪明的红娘,能把最合适的任务和人牵到一起。
你想啊,要是没有它,那咱不得乱点鸳鸯谱呀,那可不行,得把资源都好好利用起来才行呢。
比如说,有五个任务,五个。
运筹学__指派问题

•下面要证明M m. 如图假定覆盖所有0元素的m条直线 有r行、c列,m=r+c.
所有r行上不在j1,…,jc列上的0元 素个数≥ r,这些0元素至少有r个位
于不同列
同理:所有c列上不在i1,…,ir行上
j1 j2
的0元素个数≥c ,且这些0元素至
少有c个位于不同
i1 i2
ir jc
若上述两部分0个数总和为S,则S≥m;其中有m 个,又它们必无重复元素,彼此独立,则SM,故 有m≤M, 故可得M=m.
覆盖所有“0”元素的最少直线数 = 独立的“0”元素 的最多个数
推论1:覆盖所有“0”元素的直线数≥ 不同行不同列的“0”元素的最多个数(m)
推论2:覆盖所有“0”元素的最少直线数≥ 不同行不同列的“0”元素的个数
定理2说明: 1. 只要表中含有不同行或不同列的“0”元素,
都可以通过直线覆盖的方式来找到它们 2. 当覆盖直线的最少条数达到m条时,
(二)算法的基本原理 匈牙利数学家狄·康尼格(D·Konig)证明的两个定理
定理1 如果从指派问题效率矩阵[cij]的每一行元素中分别 减去(或加上)一个常数ui(被称为该行的位势), 从每一列分别减去(或加上)一个常数vj(称为该列的位势) 得到一个新的效率矩阵[bij], 若其中bij=cij-ui-vj,
一、指派问题的数学模型
(一)举例
例7: 有一份中文说明书, 要分别译成英、日、德、俄四种文字, 分别记作E 、 J 、 G 、 R ,交与甲、乙、丙、丁 四个人去完成. 因个人专长不同, 他们完成翻译不同语种的说明书所需的时间(h)如表所示. 应如何指派,使四个人分别完成这四项任务总时间为最小?
任务 人员
将其代入目标函数中得到zb=0,它一定是最小值。 ❖ 这就是以(bij)为系数矩阵的指派问题的最优解。
匈牙利算法——精选推荐

匈⽛利算法0 - 相关概念0.1 - 匈⽛利算法 匈⽛利算法是由匈⽛利数学家Edmonds于1965年提出,因⽽得名。
匈⽛利算法是基于Hall定理中充分性证明的思想,它是⼆部图匹配最常见的算法,该算法的核⼼就是寻找增⼴路径,它是⼀种⽤增⼴路径求⼆分图最⼤匹配的算法。
0.2 - ⼆分图 若图G的结点集合V(G)可以分成两个⾮空⼦集V1和V2,并且图G的任意边xy关联的两个结点x和y分别属于这两个⼦集,则G是⼆分图。
1 - 基本思想1. 找到当前结点a可以匹配的对象A,若该对象A已被匹配,则转⼊第3步,否则转⼊第2步2. 将该对象A的匹配对象记为当前对象a,转⼊第6步3. 寻找该对象A已经匹配的对象b,寻求其b是否可以匹配另外的对象B,如果可以,转⼊第4步,否则,转⼊第5步4. 将匹配对象b更新为另⼀个对象B,将对象A的匹配对象更新为a,转⼊第6步5. 结点a寻求下⼀个可以匹配的对象,如果存在,则转⼊第1步,否则说明当前结点a没有可以匹配的对象,转⼊第6步6. 转⼊下⼀结点再转⼊第1步2 - 样例解析 上⾯的基本思想看完肯定⼀头雾⽔(很⼤程度是受限于我的表达能⼒),下⾯通过来就匈⽛利算法做⼀个详细的样例解析。
2.1 - 题⽬⼤意 农场主John有N头奶⽜和M个畜栏,每⼀头奶⽜需要在特定的畜栏才能产奶。
第⼀⾏给出N和M,接下来N⾏每⾏代表对应编号的奶⽜,每⾏的第⼀个数值T表⽰该奶⽜可以在多少个畜栏产奶,⽽后的T个数值为对应畜栏的编号,最后输出⼀⾏,表⽰最多可以让多少头奶⽜产奶。
2.1 - 输⼊样例5522532342153125122.2 - 匈⽛利算法解题思路2.2.1 - 构造⼆分图 根据输⼊样例构造如下⼆分图,蓝⾊结点表⽰奶⽜,黄⾊结点表⽰畜栏,连线表⽰对应奶⽜能在对应畜栏产奶。
2.2.2 - 模拟算法流程为结点1(奶⽜)分配畜栏,分配畜栏2(如图(a)加粗红边所⽰)为结点2(奶⽜)分配畜栏,由于畜栏2已经被分配给结点1(奶⽜),所以寻求结点1(奶⽜)是否能够分配别的畜栏,以把畜栏2腾给结点2(奶⽜)。
指派问题的匈牙利法

4 0 2 3
5 9 0 1 5 4 0 9 3 7 6 0
4 0 2 3
5 4 0 1 0 4 0 4 3 7 1 0
第二步,试指派: 第二步,试指派:
-5
举例说明 1)表上作业法 2)匈牙利法
例 有四个工人和四台不同的机床,每位工人在不 同的机床上完成给定的任务的工时如表5.12所示, 问安排哪位工人操作哪一台机床可使总工时最少?
任务1 工人1 工人2 工人3 工人4 2 15 13 4
任务2 10 4 14 7
任务3 3 14 16 13
任务4 7 8 11 9
0 0 1 0
0 0 1 1 0 0 0 0 0 0 1 0
例二、 例二、 有一份中文说明书,需译成英、 有一份中文说明书,需译成英、日、德、俄四种
文字,分别记作A、 、 、 。现有甲、 文字,分别记作 、B、C、D。现有甲、乙、丙、丁四 人,他们将中文说明书译成不同语种的说明书所需时 间如下表所示,问如何分派任务,可使总时间最少? 间如下表所示,问如何分派任务,可使总时间最少?
再看一例
请求解如下矩阵表达的指派问题
12 7 9 7 9 8 9 6 6 6 7 17 12 14 9 15 14 6 6 10 4 10 7 10 9
Байду номын сангаас
减去最小元素
5 0 2 0 2 2 3 0 0 0 0 10 5 7 2 9 8 0 0 10 0 6 3 6 5
√
调整可行解
7 4 0 11 0
0 2 0 3 0 0 8 3 5 8 0 0 4 1 4
2 0 0 10 3
数学建模匈牙利算法

数学建模匈牙利算法
【最新版】
目录
一、匈牙利算法的概念与基本原理
二、匈牙利算法的应用实例
三、匈牙利算法的优缺点
正文
一、匈牙利算法的概念与基本原理
匈牙利算法(Hungarian algorithm)是一种求解二分图最大匹配问题的算法,由匈牙利数学家 Mátyásovszky 于 1937 年首次提出。
该算法的基本思想是:通过不断循环寻找图中的偶数长度路径,并将路径中的顶点依次匹配,直到找不到这样的路径为止。
此时,图中的所有顶点都已匹配,即得到了二分图的最大匹配。
二、匈牙利算法的应用实例
匈牙利算法广泛应用于任务分配、资源调度、数据融合等领域。
下面举一个简单的例子来说明匈牙利算法的应用。
假设有 5 个工人和 8 个任务,每个工人完成不同任务的效率不同。
我们需要为每个任务分配一个工人,使得总效率最大。
可以用一个二分图来表示这个问题,其中顶点分为两类:工人和任务。
边表示任务与工人之间的效率关系。
匈牙利算法可以用来求解这个问题,找到最优的任务分配方案。
三、匈牙利算法的优缺点
匈牙利算法的优点是简单、高效,可以解决二分图的最大匹配问题。
然而,它也存在一些缺点:
1.匈牙利算法只能解决无向图的匹配问题,对于有向图,需要将其转
换为无向图才能使用匈牙利算法。
2.当图中存在环时,匈牙利算法无法找到最大匹配。
这时需要使用其他算法,如 Euclidean algorithm(欧几里得算法)来解决。
3.匈牙利算法在实际应用中可能存在数值稳定性问题,即在计算过程中可能出现精度误差。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
√ √ √ √
√
l =m=4 < n=5
1 2 4 3 ◎ 0
◎
0 6 2 Ø 0
3 Ø 0 3 ◎ 0 3 3 Ø 0 5 3 ◎ 0 Ø 0 2 1 3 1 4
√ √
√ √ √ √
0 1 3 2 0
3 0 3 0 4 4 0 6 0 6 2 0 3 0 0 2 0 2 0 3
◎
0 5 1 Ø 0
4 ◎ 0 3 1 Ø 5 2 3 0 4 Ø 0 ◎ 0 3 2 3 1 5
√
√
√ l =m=4 < n=5
2 2 4 4 ◎ 0
◎
0 5 1 Ø 0
4 ◎ 0 3 1 Ø 5 2 3 0 4 Ø 0 ◎ 0 3 2 3 1 5
(4) 若仍有没有划圈的 0 元素,且同行 ( 列 ) 的 0 元素至 少有两个,则从剩有 0元素最少的行 (列 )开始,比较这 行各0元素所在列中0元素的数目,选择0元素少的那列 的这个 0 元素加圈 ( 表示选择性多的要“礼让”选择性 少的 ) 。然后划掉同行同列的其它 0 元素。可反复进行, 直到所有0元素都已圈出和划掉为止。
伏格尔法
最小元素法的缺点是只考虑了就近的问题却没有考虑就近所付 出的机会成本。伏格尔法通过计算每一行、每一列在没有选择 最小元素(选择次小元素)时的费用增加,可给出最优或近似 最优的方案,因此它是一种十分有效的方法。伏格尔法把费用 增量定义为给定行或列次小元素与最小元素的差(如果存在两 个或两个以上的最小元素费用增量定义为零)。最大差对应的 行或列中的最小元素确定了产品的供应关系,即优先避免最大 的费用增量发生。当产地或销地中的一方在数量上供应完毕或 得到满足时,划去运价表中对应的行或列,再重复上述步骤, 即可得到一个初始的基可行解。仍以例4-1来说明伏格尔法。 第一步:在表4-1中找出每行、每列两个最小元素的差额,并 填入该表的最右列和最下行,见表4-12
例一:
任务
人员
A 2
10 9 7
B 15
4 14 8
C 13
14 16 11
D 4
15 13 9
甲
乙 丙 丁
2 10 9 7
15 4 14 8
13 14 16 11
4 15 13 9
2 4
9
7
0 13 11 2 6 0 10 11 0 5 7 4 0 1 4 2
0 5 1 0
4 0 3 1 2 3 0 5 4 0 0 3 2 3 1 5
2 2 4 4 ◎ 0
◎
0 5 1 Ø 0
4 ◎ 0 3 1 Ø 5 2 3 0 4 Ø 0 ◎ 0 3 2 3 1 5
2 2 4 4 ◎ 0
0 0 1 0
0 1 0 0
0 0 0 1
1 0 0 0
例二、 有一份中文说明书,需译成英、日、德、俄四种 文字,分别记作A、B、C、D。现有甲、乙、丙、丁四 人,他们将中文说明书译成不同语种的说明书所需时 间如下表所示,问如何分派任务,可使总时间最少?
任务
人员
A
6 4 3
第一步:变换指派问题的系数矩阵( cij )为 (bij) ,使 在(bij)的各行各列中都出现0元素,即 (1) 从(cij)的每行元素都减去该行的最小元素; (2) 再从所得新系数矩阵的每列元素中减去该列的最 小元素。
第二步:进行试指派,以寻求最优解。 在(bij)中找尽可能多的独立0元素,若能找出n个独 立 0 元素,就以这 n 个独立 0 元素对应解矩阵 (xij) 中的元 素为1,其余为0,这就得到最优解。找独立0元素,常 用的步骤为: (1)从只有一个0元素的行(列)开始,给这个0元素加 圈,记作◎ 。然后划去◎ 所在列(行)的其它0元素,记 作 Ø ;这表示这列所代表的任务已指派完,不必再考 虑别人了。 (2)给只有一个0元素的列(行)中的0元素加圈,记作 ◎;然后划去◎ 所在行的0元素,记作Ø . (3)反复进行(1),(2)两步,直到尽可能多的0元素都 被圈出和划掉为止。
15
3 ◎ 2 2
4 3 1 Ø ◎ 4 6 ◎
◎
5 4 Ø
得到4个独 立零元素, 所以最优解 矩阵为:
练习:
费 工作 用 人员
A
7
B
5
C
9
D
8
E
11
甲
乙
丙 丁 戊
9
8 7 4
12
5 3 6
7
4 6 7
11
6 9 5
9
8 6 11
7 9 8 7 4
1 2 4 3 0
0 6 2 0
3 0 3 0 3 3 0 5 3 0 0 2 1 3 1 4
1 2 4 3 0
0 6 2 0
3 0 3 0 3 3 0 5 3 0 0 2 1 3 1 4
1 2 4 3 ◎ 0
2 10 3 2 9 7 2 7 5 2 3 5 6 9 10
B
7 5 1
C
11 9 10
D
2 8 4
甲 乙 丙
丁
5
9
8
2
求解过程如下:
第一步,变换系数矩阵:
6 4 (cij ) 3 5 7 11 2 2 5 9 8 4 1 10 4 1 9 8 2 2
4 0 2 3
5 1 0 7
9 5 9 6
5 9 8 11 5 12 7 11 9 7 5 4 6 94 3 6 9 63 6 7 5 11 4
2 2 4 4 0
0 5 1 0
6 2 5 3 2 3 1 7 4 0 0 3 3 4 2 6
-1 -2
2 2 4 4 0
6 2 ◎ 0 4
4
3 ◎ 0 3 Ø 0 6
用匈牙利法求解下列指派问题,已知效率矩 阵分别如下:
7 13 15 11
9 12 16 12
10 16 14 15
12 17 15 16
3 8 8 7 6 4 8 4 9 10
例一:
甲 乙 丙 丁 两最小元素之差 A 3 11 3 10 0
B
1
9
2
8
1
C
7
4
10
5
1
两最小元素之差
2
5
1
3
例一:
第二步:从行和列的差额中选出最大者,选择它所在的行或列 中的最小元素的位置确定供应关系。在表4-12中乙列是最大差 额“5”所在的列,乙列中的最小元素是“4”,从而确定了C与 乙间的供应关系,表4-13即反应了这一供应关系。同最小元素 法一样,由于乙的需求已得到了满足,将运价表中的乙列划去。 第三步:对运价表中未划去的元素再分别计算出各行、各列两 个最小运费的差,并填入该表的最右列和最下行,见表4-14。 重复第一、第二两步,直到给出一个初始基可行解,
◎
0 6 2 Ø 0
3 √ Ø 0 √ 3 √ √ ◎ 0 3 3 Ø 0 5 3 ◎ 0 Ø 0 2 1 3 1 4
√ √
√
1 2 4 3 0 ◎
◎
0 6 2 0 Ø
3 0 Ø 3 0 ◎ 3 3 Ø 0 5 3 0 ◎ 0 Ø 2 1 3 1 4
4 ◎ 2 3 5 4 ◎ √ 1 Ø 4 ◎ 4 3 √ 7 1 Ø √
独立零元素的个数m等于最少直线数l,即l=m=3<n=4; 第四步,变换矩阵(bij)以增加0元素:没有被直线 覆盖的所有元素中的最小元素为1,然后打√各行都减 去1;打√各列都加上1,得如下矩阵,并转第二步进 行试指派:
28
此问题有多个最优解
◎ 0 1 3 2 Ø 0
Ø 0
3
Ø 0 ◎ 0 2
Ø 0
6 2 ◎ 0 4
2 0 Ø 3
◎ 0
4
3 ◎ 0 3 Ø 0 6
0 Ø 1 3 2 ◎ 0
Ø 0
3
Ø 0 ◎ 0 2
◎
0 2 0 Ø 3
Ø 0
匈牙利算法示例
信管网():最专业信息系统项目管理师网站
(二)、解题步骤: 指派问题是0-1 规划的特例,也是运输问题的特例, 当然可用整数规划,0-1 规划或运输问题的解法去求 解,这就如同用单纯型法求解运输问题一样是不合算 的。利用指派问题的特点可有更简便的解法,这就是 匈牙利法,即系数矩阵中独立 0 元素的最多个数等于 能覆盖所有 0 元素的最少直线数。
4 ◎ 2 3
5 4 ◎ √ Ø 1 4 ◎ 4 3 √ 7 1 Ø √
3 ◎ 2 2
4 3 ◎ 1 Ø 5 ◎ 4 4 6 0 Ø
3 4 3 0 0 1 0 5 2 0 4 4 2 6 0 0
0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0
(5)若◎ 元素的数目m 等于矩阵的阶数n,那么这指 派问题的最优解已得到。若m < n, 则转入下一步。
第三步:作最少的直线覆盖所有0元素。 (1)对没有◎的行打√号; (2)对已打√号的行中所有含Ø元素的列打√号; (3)再对打有√号的列中含◎ 元素的行打√号;
(4)重复(2),(3)直到得不出新的打√号的行、列为止; (5) 对没有打 √ 号的行画横线,有打 √ 号的列画纵线, 这就得到覆盖所有0元素的最少直线数 l 。l 应等于m, 若不相等,说明试指派过程有误,回到第二步 (4) ,另 行试指派;若 l=m < n,须再变换当前的系数矩阵, 以找到n个独立的0元素,为此转第四步。 第四步:变换矩阵(bij)以增加0元素。 在没有被直线覆盖的所有元素中找出最小元素,然后 打√各行都减去这最小元素;打√各列都加上这最小元 素(以保证系数矩阵中不出现负元素)。新系数矩阵 的最优解和原问题仍相同。转回第二步。