POJ3041最大匹配匈牙利算法

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[501][501],match[501],m,n,p[501];
int dfs(int x){
    int i,j,k;
    for(i=1;i<=n;i++)
        if(a[x][i] && !p[i]){
            p[i]=1;
            if(!match[i] || dfs(match[i])){
                match[i]=x;
                return 1;         
            }
        }
    return 0;    
}
int main(){
    int i,j,k;    
    cin>>n>>m;
    int x,y;
    for(i=1;i<=m;i++){
        scanf("%d%d",&x,&y);                 
        a[x][y]=1;                      
    }
    int ans=0;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++)
		  p[j]=0;                  
        if(dfs(i)==1)ans++;              
    }
    cout<<ans<<endl;
    return 0;    
}

你可能感兴趣的:(C语言,poj,图论,最大匹配,匈牙利算法)