匈牙利算法代码详解,非常详细!

来源:互联网 发布:中美 知乎 编辑:程序博客网 时间:2024/05/22 13:31

算法原理看这里http://blog.csdn.net/dark_scope/article/details/8880547就好了,此处对该文代码详解,当然也许你看它其实可以看懂的。

#include<cstdio>#include<cstring>#include<iostream>using namespace std;bool line[10][10];                 //互相好感int used[10];                      //此次循环中,女孩j是否曾经被匹配过int girl[10];                      //女孩的男朋友bool find(int x){                  //为男孩x找女朋友    int i,j;      for (j=1;j<=3;j++){            //遍历所有女孩        if (line[x][j]==true && used[j]==false)   //如果 有好感 && 此次新循环里(每次新循环开始时usd为空)女孩j没有被匹配过               {              used[j]=1;                            //标记为匹配            if (girl[j]==0 || find(girl[j])) {    //如果 女孩j没有男朋友 || 能为这个男的重新找一个                girl[j]=x;                        //把x--->j                return true;              }          }      }      return false;  }  int main(){    int i,all=0;    int x,y;     line[1][1]=true;line[1][2]=true;line[2][2]=true;line[2][3]=true;line[3][1]=true;line[3][2]=true;  //line赋值    for (i=1;i<=3;i++)      {          memset(used,0,sizeof(used));        //!!!!警告:每一次清空usd数组         if(find(i)) all+=1;      }    for(i=1;i<4;i++)        printf("%d---%d ",girl[i],i);    return 0;}

原创粉丝点击