?? 一般圖匹配(鄰接表形式,鄰接陣接口).txt
字號:
//一般圖最大匹配,鄰接表形式,復雜度O(n*e)
//返回匹配頂點對數(shù),match返回匹配,未匹配頂點match值為-1
//傳入圖的頂點數(shù)n和鄰接表list
#include <vector>
#define MAXN 100
int aug(int n,vector<int> list[],int* match,int* v,int now){
int t,ret=0,r;
v[now]=1;
// for (e=list[now];e;e=e->next)
for (r=0;r<list[now].size();++r)
if (!v[t=list[now][r]]){
if (match[t]<0)
match[now]=t,match[t]=now,ret=1;
else{
v[t]=1;
if (aug(n,list,match,v,match[t]))
match[now]=t,match[t]=now,ret=1;
v[t]=0;
}
if (ret)
break;
}
v[now]=0;
return ret;
}
int graph_match(int n,int mat[][MAXN],int* match){
int v[MAXN],i,j;
vector<int> list[MAXN];
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (mat[i][j]) list[i].push_back(j);
for (i=0;i<n;i++)
v[i]=0,match[i]=-1;
for (i=0,j=n;i<n&&j>=2;)
if (match[i]<0&&aug(n,list,match,v,i))
i=0,j-=2;
else
i++;
for (i=j=0;i<n;i++)
j+=(match[i]>=0);
return j/2;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -