算法模板——二分图匹配
时间:2022-05-07
本文章向大家介绍算法模板——二分图匹配,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
实现功能为二分图匹配
原理:匈牙利算法,核心思想——匹配上了就配,没直接匹配上也要通过前面的腾出位置让这个匹配上(详见:趣写算法系列之——匈牙利算法)
本程序以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
- .NET Core多平台开发体验[2]: Mac OS X
- .NET Core多平台开发体验[1]: Windows
- 如何远程关闭一个ASP.NET Core应用?
- 【深度学习】谷歌deepdream原理及tensorflow实现
- 【深度学习】写诗机器人tensorflow实现
- PyTorch还是TensorFlow?这有一份新手指南
- Leetcode 300. Longest Increasing Subsequence
- Leetcode 299. Bulls and Cows
- Leetcode 297. Serialize and Deserialize Binary Tree
- Leetcode 295. Find Median from Data Stream
- 投入大见效慢,还要做AI?
- Leetcode 292. Nim Game
- Leetcode 290. Word Pattern
- 【深度学习】使用tensorflow实现VGG19网络
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何将ABAP透明表的内容导入PostgreSQL数据库
- 使用代理模式改善SAP UI5应用的图片加载体验
- 如何使用ABAP open SQL的locator
- dotnet 新 SDK Style 项目格式如何使用 InternalsVisibleToAttribute 功能
- WPF dotnet core 如何开启 Pointer 消息的支持
- web Storage的特点
- 四、实现跨域访问
- hadoop集群搭建
- java和node.js使用md5算法实现对数据的加密与加盐操作
- 反射--调用构造方法
- ABAP,Java和JavaScript的local class
- mysql查看被锁住的表
- Putty个性化配置
- Windows10子系统(WSL)修改安装目录
- 二、JSON数据格式