参考博客:

https://blog.csdn.net/sunny_hun/article/details/80627351

 

模板:

#include<bits\stdc++.h>
using namespace std;

const int maxn=500;
int line[maxn][maxn];//邻接矩阵储存边 
int used[maxn];//标记该点是否已使用 
int ans[maxn];//记录连接的点 

bool find(int x)
{
    for(int i=1;i<=n;i++)//被连接的点
    {
        if(line[x][i]&&!used[i])
        {
            used[i]=1;
            if(!ans[i]||find(ans[i]))
            {
                ans[i]=x;
                return true;    
            }    
        }    
    } 
    return false;
}

int main()
{
    memset(line,0,sizeof(line));
    int n,m;
    scanf("%d %d",&n,&m);//n为点的数量,m为边的数量 
    for(int i=0;i<m;i++)
    {
        int a,b;
        scanf("%d %d",&a,&b);
        line[a][b]=1;
    }
    for(int i=1;i<=n;i++)
    {
        memset(used,0,sizeof(used));
        find(i);
    }
}