匈牙利算法的C#实现版本

本文介绍了匈牙利算法的原理及其在C#中的实现,通过一个教授分配课程的例子来展示算法的解题过程。通过步骤分析,得出最佳的完全指派方案,并计算出最小的总准备时间。最后,提供了算法的具体代码实现。
摘要由CSDN通过智能技术生成

算法的原理:

   

範例:

有四位教授被分派開設四門課程,如何指派使所需的總準備時間為最小。已知個人對各課程之準備時間如下表所示:

  

課程1

課程2

課程3

課程4

教授A

2

10

9

7

教授B

15

4

14

8

教授C

13

14

16

11

教授D

4

15

13

9

   

解法:

Step 1. 在各列中找最小值,將該列中各元素檢去此值,對各行重複一次。

0

8

7

5

本列各減2

11

0

10

4

本列各減4

2

3

5

0

本列各減11

0

11

9

5

本列各減4

   

0

8

2

5

11

0

5

4

2

3

0

0

0

11

4

5

本欄各減0

本欄各減0

本欄各減5

本欄各減0

   

Step 2. 檢驗各列,對碰上之第一個零,做記號,同列或同欄的其他零則畫X (由零較少的列先做,可不依順序)

0

8

2

5

11

0

5

4

2

3

0

0

0

11

4

5

Step 3. 檢驗可否完成僅含零的完全指派,若不能,則畫出最少數目的垂直與水平的刪除線來包含所有的零至少一次。

0

8

2

5

11

0

5

4

2

3

0

0

0

11

4

5

   

Step 4. 找出未被畫線的元素中之最小值 K,將含有此些未被畫線的元素的各列所有元素減去K (Step 4.1),若造成負值,則將該欄加上K (Step 4.2)。形成新矩陣後回到Step 2.

Step 4.1

-2

6

0

3

11

0

5

4

2<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值