perfect-match.cpp

来自「这是关于图论算法里面的一些代码,图论基本的思想代码的实现」· C++ 代码 · 共 42 行

CPP
42
字号
bool dfs(int s)
{
 int i;
 cx[s]=true;
 for(i=0;i<cnt;i++)
 if(!cy[i]&& x[s]+y[i]==w[s][i])
 {
  cy[i]=true;
  if(match[i]==-1||dfs(match[i]))
  {
   match[i]=s;
   return true;
  }   
 } 
 return false;
}
void max_match()
{
 int i,j,k;
 int d,tmp;
 memset(match,0xff,sizeof(match));   
 for(i=0;i<cnt;i++)
 {
  while(true)
  {
   memset(cx,false,sizeof(cx));
   memset(cy,false,sizeof(cy));   
   if(dfs(i))break;
   d = 0x3fffffff;
   for(j=0;j<cnt;j++)
    if(cx[j])
     for(k=0;k<cnt;k++)
      if(!cy[k])
       d = d>(tmp=x[j]+y[k]-w[j][k]))?tmp:d;
   for(j=0;j<cnt;j++){
    if(cx[j])x[j]-=d;
    if(cy[j])y[j]+=d;
   }
  } 
 }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?