实现功能为二分图匹配

原理:匈牙利算法,核心思想——匹配上了就配,没直接匹配上也要通过前面的腾出位置让这个匹配上(详见:趣写算法系列之——匈牙利算法)

本程序以Codevs2776为例

详见Codevs2776

 1 type
 2     point=^node;
 3     node=record
 4                g:longint;
 5                next:point;
 6     end;
 7 var
 8    i,j,k,l,m,n:longint;
 9    c,f:array[0..1000] of longint;
10    a:array[0..1000] of point;
11 procedure add(x,y:longint);inline;
12           var p:point;
13           begin
14                new(p);
15                p^.g:=y;
16                p^.next:=a[x];
17                a[x]:=p;
18           end;
19 function check(x:longint):boolean;inline;
20          var p:point;
21          begin
22               p:=a[x];
23               while p<>nil do
24                     begin
25                          if f[p^.g]<>i then
26                             begin
27                                  f[p^.g]:=i;
28                                  if c[p^.g]=0 then
29                                     begin
30                                          c[p^.g]:=x;
31                                          exit(true);
32                                     end
33                                  else if check(c[p^.g]) then
34                                       begin
35                                            c[p^.g]:=x;
36                                            exit(true);
37                                       end;
38                             end;
39                          p:=p^.next;
40                     end;
41               exit(false);
42          end;
43
44 {$IFDEF WINDOWS}{$R wiki2776.rc}{$ENDIF}
45
46 begin
47      readln(n,m);
48      for i:=1 to n do
49          begin
50               a[i]:=nil;
51               while not(eoln) do
52                     begin
53                          read(j);
54                          if j=0 then break;
55                          add(i,j);
56                     end;
57               readln;
58          end;
59      fillchar(c,sizeof(c),0);
60      fillchar(f,sizeof(f),0);l:=0;
61      for i:=1 to n do
62          if check(i) then inc(l);
63      writeln(l);
64      readln;
65 end.
66        

转载于:https://www.cnblogs.com/HansBug/p/4234898.html

算法模板——二分图匹配相关推荐

  1. 匈牙利算法解决二分图匹配问题

    匈牙利算法是由匈牙利数学家Edmonds于1965年提出.匈牙利算法是基于Hall定理中充分性证明的思想,它是二分图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的 ...

  2. 算法:ACM二分图匹配 HDU2063

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2063 摘录于互联网,原创作者redraiment,很详细的二分图匹配入门资料! 2063 过山车 Pr ...

  3. 【HDU - 5090】Game with Pearls (匈牙利算法,二分图匹配)

    题干: Tom and Jerry are playing a game with tubes and pearls. The rule of the game is: 1) Tom and Jerr ...

  4. 【 HDU - 5093】Battle ships(匈牙利算法,二分图匹配)

    题干: Dear contestant, now you are an excellent navy commander, who is responsible of a tough mission ...

  5. 【小算法】二分图匹配之匈牙利算法详解(图例说明,代码亲测可用)

    在软件开发领域,任务指派和数据关联是一种常见业务需求,比如买卖订单的匹配,共享出行的人车匹配,及自动驾驶领域中目标追踪. 这都牵扯到一种技术,那就是数据关联,而匈牙利算法就是解决此类问题最典型的算法, ...

  6. P3386 【模板】二分图匹配(匈牙利算法)

    展开 题目背景 二分图 感谢@一扶苏一 提供的hack数据 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入格式 第一行,n,m,e 第二至e+1行,每行两个正整数u ...

  7. 经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)...

    题目来源 P3376 [模板]网络最大流 P2756 飞行员配对方案问题 P3381 [模板]最小费用最大流 最大流 最大流问题是网络流的经典类型之一,用处广泛,个人认为网络流问题最具特点的操作就是建 ...

  8. 洛谷 P3386 【模板】二分图匹配

    洛谷 P3386 [模板]二分图匹配 题目 题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行 ...

  9. 利用匈牙利算法Hopcroft-Karp算法解决二分图中的最大二分匹配问题 例poj 1469 COURSES...

    首先介绍一下题意:已知,有N个学生和P门课程,每个学生可以选0门,1门或者多门课程,要求在N个学生中选出P个学生使得这P个学生与P门课程一一对应. 这个问题既可以利用最大流算法解决也可以用匈牙利算法解 ...

最新文章

  1. 由粗到精学习LVI-SAM基础:多传感器内外参标定原理
  2. 文件输入输出和string流
  3. python自带超参调优包
  4. linux tcp 包大小,linux – 通过大量连接和小数据包流量高的千兆网络提高TCP性能...
  5. Hadoop之MapReduce工作流程
  6. IOS 6 之后 Required background modes
  7. mysql查询每月、每天订单金额
  8. 当自己颓废的时候怎么激励自己?
  9. Tensorflow精进之路(二):两层卷积神经网络模型训练MNIST
  10. java 对错代厔_如何获得汉字拼音的首字母序列
  11. Java的文件读写操作
  12. Pda 数据库同步问题
  13. kodi树莓派_树莓派投屏秒变家庭影院(安装 kodi
  14. 小程序中引用阿里云图标库
  15. 时统ptp_IEEE1588 PTP对时系统原理及特点
  16. Python图像绘制字符画
  17. win10如何修改计算机管理员的名字,hp win10系统管理员名称改了后怎么改回去
  18. 微课程学习平台(微课平台)-特色功能(移动学习解决方案)
  19. 详解 Python qrcode 二维码模块
  20. 我猜中了开始 也猜中了结局

热门文章

  1. SparkStreaming读取Kakfa数据时发生OffsetOutOfRangeException异常
  2. 2109春第一次课程设计实验报告
  3. springMvc的执行流程(源码分析)
  4. centos 7 部署 open-falcon 0.2.0
  5. JavaWeb基础—数据库连接池DBCP、C3P0
  6. Hibernate的DetachedCriteria使用(含Criteria)
  7. 优秀学生是如何高效利用时间的?
  8. Zend Framework数据库操作
  9. android-技术教程-调试程序的基础,在控制台上打印出想打印的东西 转载
  10. VC++2005 CString和char*的相互转换