?? 匈牙利.cpp
字號:
#include <iostream.h>
#include <string.h>
int match[100];
int n;
char a[100][100];
int find(int k)
{
int st,sf,i,j,t;
int q[100];
int f[100];
q[1] = k,st = 1,sf = 1;
memset(f,0,sizeof f);
while (st<=sf)
{
for(i=1;i<=n;i++)
if (!f[i] && a[q[st]][i])
{
if (match[i])
{
sf++;
q[sf] = match[i];
f[i] = q[st];
}
else
{
j = q[st];
while(1)
{
t = match[j];
match[j] = i;
match[i] = j;
if (!t) break;
i = t;
j = f[t];
}
return 1;
}
}
st++;
}
return 0;
}
int main()
{
a[1][6] = a[6][1] = 1;
a[2][5] = a[5][2] = 1;
a[2][7] = a[7][2] = 1;
a[3][6] = a[6][3] = 1;
a[4][7] = a[7][4] = 1;
n = 8;
int i,all = 0;
for(i=1;i<=n;i++) if (!match[i])
{
all+=find(i);
}
cout<<all<<endl;
return 0 ;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -