首页 > 编程语言 >二分图最大匹配(匈牙利算法)

二分图最大匹配(匈牙利算法)

时间:2024-08-14 23:06:43浏览次数:11  
标签:二分 增广 int 匈牙利 算法 选中 510

二分图最大匹配(匈牙利算法)

算法思路

寻找增广路
即一条以选中边开始,以选中边结束的路,它有一个重要的性质:选中边比未选中边多一.
只需要不断贪心的找增广路,直到不存在为止

具体实现

以dfs(深度优先)为例
1.从左部1号开始搜寻增广路
2.令当前点编号为x遍历右部与x相连的点
3.若当前点未被选中或选中它的点有其他选择(即存在增广路)则选中,继续遍历

code

luogu
P3386
#include<bits/stdc++.h>
using namespace std;
int n,m,e;
int G[510][510];
int match[510];  //右边第i个对应左边第match[i]个
int vis[510];   //右边状态
bool dfs(int x){ //x为左边点
    for(int i=1;i<=m;i++){
        if(vis[i]==0&&G[x][i]==1){
            vis[i]=1;
            if(match[i]==0||dfs(match[i])){
                match[i]=x;
                return 1;
            }
        }
    }
    return 0;
}
int ans=0;
int main(){
    cin>>n>>m>>e;
    for(int i=1,u,v;i<=e;i++){
        cin>>u>>v;
        G[u][v]=1;
    }
    for(int i=1;i<=n;i++){     //遍历左边点
        memset(vis,0,sizeof(vis));
        if(dfs(i)) ans++;      //找增广路
    }
    cout<<ans;
    return 0;
}

标签:二分,增广,int,匈牙利,算法,选中,510
From: https://www.cnblogs.com/grylls2012/p/18359934

相关文章

  • NRBO-BP-Adaboost回归 基于牛顿拉夫逊算法优化BP神经网络-Adaboost多变量回归预测(多
    NRBO-BP-Adaboost回归基于牛顿拉夫逊算法优化BP神经网络-Adaboost多变量回归预测(多输入单输出)程序已经调试好,无需更改代码替换数据集即可运行!!!数据格式为excel!需要其他的都可以定制!1️⃣、运行环境要求MATLAB版本为2019b及其以上2️⃣、评价指标包括:R2、MAE、MSE、RPD、RMSE......
  • 冒泡排序算法
    C++实现冒泡排序算法:#include<iostream>usingnamespacestd;voidbubbleSort(intarr[],intn){for(inti=0;i<n-1;i++){for(intj=0;j<n-i-1;j++){if(arr[j]>arr[j+1]){//交换arr[j]和arr[j+1]inttemp=arr[j];arr[j]=arr[j+1];......
  • 【算法模板】计算几何:旋转卡壳求凸包直径
    旋转卡壳算法是一种几何算法,主要用于在二维平面上求解与凸包相关的最优问题。该算法利用凸包顶点的顺序性和对称性,通过模拟两个卡壳(calipers)沿着凸包边界的旋转来寻找最优解。常见的应用包括计算凸包的直径(即最远点对之间的距离)、最小包围矩形(最小面积矩形),以及最小宽度(宽度......
  • 操作系统-进程创建、同步与锁、通信、调度算法-学习笔记
    1.进程的基础概念1.1进程是什么?定义:进程是操作系统管理的一个程序实例。它包含程序代码及其当前活动的状态。每个进程有自己的内存地址空间,拥有独立的栈、堆、全局变量等。操作系统通过进程来分配资源(如CPU时间、内存等)并管理任务的执行。进程vs程序:程序:静态的代......
  • [插电式混合动力车辆][交替方向乘子法(ADMM)结合CVX]插电式混合动力车辆的能源管理:基于
     ......
  • 【优化交叉口的绿灯时间】基于遗传算法的交通灯管理研究(Matlab代码实现)
    ......
  • 子串查找算法KMP
    什么是子串查找        字符串子串查找是一种在较长的字符串(通常称为"主串"或"文本")中寻找一个较短字符串(称为"模式串"或"子串")的过程。这是计算机科学中的一个基本问题,在文本编辑、信息检索、生物信息学等多个领域都有广泛应用。主要的子串查找算法包括:暴力匹配法(B......
  • 卡尔曼滤波算法
    目录卡尔曼滤波基本原理卡尔曼滤波的数学模型卡尔曼滤波算法步骤1.初始化2.预测步骤3.更新步骤完整的卡尔曼滤波实现总结卡尔曼滤波是一种递归滤波器,广泛应用于信号处理和控制系统中,用于估计动态系统的状态。它通过结合预测和测量数据,在存在噪声的情况下对系统状......
  • sm2算法
    sm2算法简称国密,下面是百度讲解:SM2算法和RSA算法都是公钥密码算法,SM2算法是一种更先进安全的算法,在我们国家商用密码体系中被用来替换RSA算法。随着密码技术和计算机技术的发展,目前常用的1024位RSA算法面临严重的安全威胁,我们国家密码管理部门经过研究,决定采用SM2椭圆曲线算......
  • 【机器学习】CNN卷积神经网络算法的基本概念、训练过程(含python代码)和应用领域
    引言卷积神经网络(ConvolutionalNeuralNetwork,CNN)是一种深度学习模型,主要用于图像识别、图像分类、物体检测和计算机视觉等领域文章目录引言一、卷积神经网络(ConvolutionalNeuralNetwork,CNN)1.1基本原理1.2主要结构1.2.1卷积层(ConvolutionalLayer)1.2.2激活函......