您好,登錄后才能下訂單哦!
將寫代碼過程中重要的一些代碼片段珍藏起來,如下的代碼是關于C語言[二分圖最大匹配] 匈牙利算法的代碼,應該是對各位有一些好處。
const int INF = 0x3f3f3f3f;
const int MAXN=510;
{
int v;
{
{
used[v]=true;
{
link[v]=u;
return true;
}
}
}
return false;
}
int hungary()
{
int res=0;
int i,u;
memset(link,-1,sizeof(link));
for(u=0;u<uN;u++)
{
memset(used,0,sizeof(used));
if(dfs(u))
res++;
}
return res;
}
以上是匈牙利算法的關鍵代碼其實實現就是一個找增廣路徑的過程增廣路徑字面意思就是把路徑越增越廣實際意思也是一樣的DFS從左邊起始點開始搜索1.右邊如果沒匹配就匹配(link[v]==-1)2.如果右邊匹配過了...就從右邊點找左邊的匹配點再搜索看是否能增廣以上兩種情況都能使匹配邊+1這就是找二分圖最大匹配的最簡單算法了,代碼很短,時間復雜度為O(n^3),網絡流當然也能實現咯...記住咯:最小點覆蓋=二分圖最大匹配最小路徑覆蓋=|P|-二分圖最大匹配PS:網絡流還沒看...悲劇...滾去看DINIC了...
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。