匈牙利参考程序

#include<stdio.h>
#include<stdlib.h>

int a[101][101],d[101],m,n,p[101];
int dfs(int x){
    int i,j,k;
    for(i=1;i<=n;i++)
        if(a[x][i] && !p[i]){
            p[i]=1;
            if(!d[i] || dfs(d[i])){
                d[i]=x;
                printf("[%d %d]----",x,i);
                system("pause");
                return 1;         
            }
        }
    return 0;    
}
int main(){
    int i,j,k;    
    scanf("%d%d",&n,&m);
    int x,y;
    for(i=1;i<=m;i++){
        scanf("%d%d",&x,&y);                 
        a[x][y]=1;                      
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++)p[j]=0;                  
        dfs(i);              
    }
    for(i=1;i<=n;i++)printf("%d %d
",d[i],i);
    system("pause");
    return 0;    
}

原文地址:https://www.cnblogs.com/cnyali/p/4163911.html