匈牙利算法的C#实现版本
2008-04-01 20:50
330 查看
算法的原理:
範例:
有四位教授被分派開設四門課程,如何指派使所需的總準備時間為最小。已知個人對各課程之準備時間如下表所示:
解法:
Step 1. 在各列中找最小值,將該列中各元素檢去此值,對各行重複一次。
Step 2. 檢驗各列,對碰上之第一個零,做記號,同列或同欄的其他零則畫X (由零較少的列先做,可不依順序)
Step 3. 檢驗可否完成僅含零的完全指派,若不能,則畫出最少數目的垂直與水平的刪除線來包含所有的零至少一次。
Step 4. 找出未被畫線的元素中之最小值 K,將含有此些未被畫線的元素的各列所有元素減去K (Step 4.1),若造成負值,則將該欄加上K (Step 4.2)。形成新矩陣後回到Step 2.
Step 4.1
Step 4.2
形成新矩陣
Step 2.
由上表知,指派順序為 (2,2), (4,1), (1,3), (3,4),可得到完全指派。
總準備時間為 9+4+11+4 = 28 為最佳解。
算法的实现代码
1using System.Collections.Generic;
2using System.Drawing;
3
4namespace ConsoleApplication1
5
範例:
有四位教授被分派開設四門課程,如何指派使所需的總準備時間為最小。已知個人對各課程之準備時間如下表所示:
課程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 |
0 | 8 | 2 | 5 |
11 | 0 | 5 | 4 |
2 | 3 | 0 | 0 |
0 | 11 | 4 | 5 |
0 | 8 | 2 | 5 |
11 | 0 | 5 | 4 |
2 | 3 | 0 | 0 |
0 | 11 | 4 | 5 |
Step 4.1
-2 | 6 | 0 | 3 |
11 | 0 | 5 | 4 |
2 | 3 | 0 | 0 |
-2 | 9 | 2 | 3 |
0 | 6 | 0 | 3 |
13 | 0 | 5 | 4 |
4 | 3 | 0 | 0 |
0 | 9 | 2 | 3 |
Step 2.
0 | 6 | 0 | 3 |
13 | 0 | 5 | 4 |
4 | 3 | 0 | 0 |
0 | 9 | 2 | 3 |
課程1 | 課程2 | 課程3 | 課程4 | |
教授A | 9 | |||
教授B | 4 | |||
教授C | 11 | |||
教授D | 4 |
算法的实现代码
1using System.Collections.Generic;
2using System.Drawing;
3
4namespace ConsoleApplication1
5
相关文章推荐
- 八皇后算法的另一种实现(c#版本)
- 解析C#彩色图像灰度化算法的实现代码详解
- 匈牙利算法的matlab实现
- C#实现的基本算法 changqi [原作]
- SSIM(结构相似度算法)不同实现版本的差异
- 一个算法的C#实现
- 基于读取车载RFID标签自动开关车库门c#算法实现
- A Star 算法 C# 实现
- C# 中文分词算法(实现从文章中提取关键字算法)
- 匈牙利算法,KM算法详解及java实现
- DirectX编程:C#中利用Socket实现网络语音通信[初级版本]
- MD5等加密类 C#算法实现
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 几十套业务系统集中统一授权管理实现经验分享
- C#实现的18位身份证格式验证算法(转)
- EasyPR C#调用dll版本实现可视化界面
- C#实现排列组合算法
- 【彩票】彩票预测算法(一):离散型马尔可夫链模型C#实现
- 数据结构所有算法C#、VB实现
- C#实现的18位身份证格式验证算法[转载]
- 数据结构与算法(C#实现)系列---二叉树