青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 43,  comments - 9,  trackbacks - 0
圖采用矩陣存儲,下標從1開始。

匈牙利匹配算法的理論和證明不復雜,就是不斷尋找兩個端點都是未浸潤點的交替路徑,把路徑上的邊匹配狀態全部取反。每次操作,圖的匹配數都增加1。為方便描述,將二部圖劃分為X和Y兩個部集。
此算法有幾個性質:
1.算法只需以某一個部集(可以是X或Y)中的所有未浸潤點為交替路徑的起始點,展開尋找。
2.X中的某個點,只有在以它為起始點進行過交替路徑搜索后,才有可能變為浸潤點。
3.以X中的某個點為起始點,如果無法找到交替路徑,那么以后不論何時以它為起始點,都不可能找到交替路徑。
4.據1,選擇處理X集,由2,3知X集中的所有點最多只需處理一次。

偽代碼:
 1 SEARCH(Vi):
 2     SEARCH AUGMENT PATH STARTING FROM Vi
 3     IF FOUND THEN RETURN TRUE
 4     ELSE RETURN FALSE
 5 MATCHING(G(X,Y)):
 6     ANS:=0
 7     FOR EACH VERTEX Vi IN SET X
 8         T:=SEARCH(Vi)
 9         IF T=TRUE
10             ANS:=ANS+1
11         END IF
12     END FOR


尋找交替路徑這個過程有BFSDFS兩種方式。

DFS:
 1 int w[NX][NY]; //X中的點到Y中的點的連接矩陣,w[i][j]是邊<Vxi,Vyj>的權
 2 int m[NY]; //Vyi的匹配對象
 3 int v[NY]; //在一次DFS中,Vyi是否被訪問過
 4 bool dfs(int k){ //以Vxk為起點找交替路徑
 5     int i;
 6     for(i=1;i<=N;i++){
 7         if(!v[i] && w[k][i]){ //如果Vyi未訪問過,而且Vxk,Vyi有邊連接
 8             v[i]=1;
 9             if(!m[i] || dfs(m[i])){ //如果Vyi是未浸潤點,或者以Vyi原來的匹配點為起始,有擴張路徑
10                 m[i]=k;
11                 return true//擴張成功
12             }
13         }
14     }
15     return false;
16 }

這個算法也可以從類似“貪心”的角度理解:一個X中的點Vx0,如果找到某個能到達的Y點Vy0,就暫時把它“據為己有”,然后看Y的“原配X點”還能不能找到別的Y點配對,如果能,那么Vx0和Vy0就配對成功,否則不成功,Vx0繼續尋找別的Vy。

BFS:
這是我在某些算法書上看到的BFS版本,需要用變量(或變量數組)tag記錄擴展目標。代碼中,我改為用que[i]的bit1記錄:
 1 int w[NX],ma[NY];
 2 int que[NX+NY],pq,sq; //廣搜隊列
 3 int pax[NX],pay[NY]; //記錄交替路徑
 4 bool bfs(int r){
 5     int i,j,k,tag; //tag,記錄交替路徑的下一步要擴展X中的點(tag==1時),還是Y中的點(tag==0時)
 6     memset(pax,0,sizeof(pax));
 7     memset(pay,0,sizeof(pay));
 8     que[0]=(r<<1);
 9     pq=0; sq=1;
10     while(pq<sq){
11         k=que[pq]>>1; tag=que[pq]&1;
12         if(tag==0){ //process set X, look for unvisited vex in Y
13             for(i=1;i<=N;i++){
14                 if(!pay[i] && w[k][i]){
15                     pay[i]=k;
16                     if(!ma[i]){ //是未浸潤點,擴展路徑搜索完畢
17                         for(j=i;j;j=pax[pay[j]]){
18                             ma[j]=pay[j];
19                         }
20                         return true;
21                     }
22                     else//這個Y點不是未浸潤點,入隊
23                         que[sq++]=(i<<1)|1;
24                     }
25                 }
26             }
27         }
28         else//Vyk不是未浸潤點,路徑必須沿著它所在的匹配邊擴展
29             que[sq++]=(ma[k]<<1);
30             pax[ma[k]]=k;
31         }
32         pq++;
33     }
34     return false;
35 }


其實,在遇到浸潤的Vyi時,由于下一步只能沿著它的匹配點Vxj走,即排隊輪到Vyi時,必定是Vxj被加入隊列。因此,只要令隊列que僅存放X集的點,每次遇到浸潤的Vyi,把它的匹配點Vxj加入隊列。這樣就省去了分支,減小了代碼量。
實現:
 1 int w[NX],ma[NY];
 2 int que[NX+NY],pq,sq;
 3 int pax[NX],pay[NY];
 4 bool bfs(int r){
 5     int i,j,k;
 6     memset(pax,0,sizeof(pax));
 7     memset(pay,0,sizeof(pay));
 8     que[0]=r;
 9     pq=0; sq=1;
10     while(pq<sq){
11         k=que[pq++];
12         for(i=1;i<=N;i++){
13             if(!pay[i] && w[k][i]){
14                 pay[i]=k;
15                 if(!ma[i]){ //free vex, augment path found
16                     for(j=i;j;j=pax[pay[j]]){
17                         ma[j]=pay[j];
18                     }
19                     return true;
20                 }
21                 else//add Y's matched vex to que
22                     pax[ma[i]]=i;
23                     que[sq++]=ma[i];
24                 }
25             }
26         }
27     }
28     return false;
29 }

顯然,單純的匹配問題,BFS和DFS復雜度都是O(mn),但DFS編碼難度小很多。
還有一種Hopcroft-Karp算法,復雜度是O(msqrt(n)),只能用BFS實現,暫時還沒深入研究。
然而,解決帶權匹配問題時,DFS只能做到O(n^4),而BFS可以做到O(n^3)。

posted on 2009-02-15 21:55 wolf5x 閱讀(1795) 評論(0)  編輯 收藏 引用 所屬分類: algorithm
<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

"Do not spend all your time on training or studying - this way you will probably become very exhausted and unwilling to compete more. Whatever you do - have fun. Once you find programming is no fun anymore – drop it. Play soccer, find a girlfriend, study something not related to programming, just live a life - programming contests are only programming contests, and nothing more. Don't let them become your life - for your life is much more interesting and colorful." -- Petr

留言簿(3)

隨筆分類(59)

隨筆檔案(43)

cows

搜索

  •  

最新評論

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩亚洲系列| 9l视频自拍蝌蚪9l视频成人| 亚洲大胆人体在线| 国产在线精品自拍| 国产亚洲福利| 国产亚洲精品久久久| 国产亚洲欧美另类中文| 国产伦精品一区二区三区在线观看| 国产精品99一区| 国产日产欧美精品| 亚洲成人资源| 日韩一级片网址| 亚洲欧美日韩网| 欧美一区二区免费视频| 蜜桃av一区二区三区| 亚洲国产精品久久久久| 亚洲国产精品悠悠久久琪琪| 亚洲三级免费电影| 一区二区三区欧美亚洲| 久久国产精品久久精品国产| 久久精品日产第一区二区三区 | 亚洲欧美另类国产| 午夜精品一区二区三区在线播放 | 欧美成人亚洲成人| 亚洲区第一页| 欧美专区福利在线| 欧美日韩高清在线| 黄色成人91| 亚洲综合电影| 欧美激情国产日韩| 亚洲永久在线| 女人色偷偷aa久久天堂| 国产日韩欧美二区| 在线中文字幕一区| 欧美激情精品| 久久国产欧美日韩精品| 欧美一区二区三区另类| 亚洲免费一级电影| 一区二区激情小说| 久久午夜视频| 一区二区日本视频| 免费久久99精品国产| 国产精品自在欧美一区| 一本一本a久久| 欧美14一18处毛片| 欧美一区二区免费视频| 欧美理论电影在线播放| 极品av少妇一区二区| 欧美一级精品大片| 日韩一级精品| 欧美日韩国产成人高清视频| 在线成人h网| 久久精品中文字幕一区二区三区| 一本色道久久88亚洲综合88| 女主播福利一区| 亚洲国产欧美不卡在线观看| 久久久久国产精品www| 午夜欧美视频| 国产日韩亚洲欧美| 欧美一区二区三区四区在线观看| 亚洲精品日韩久久| 欧美精品一区二区三区视频| 曰本成人黄色| 免费日韩av电影| 开心色5月久久精品| 亚洲高清视频在线观看| 久久综合色88| 玖玖视频精品| 亚洲精品一区二区网址 | 欧美sm重口味系列视频在线观看| 亚洲欧美日韩国产成人精品影院 | 国产人久久人人人人爽| 西西人体一区二区| 亚洲男女毛片无遮挡| 国产九九精品| 久久亚洲国产精品日日av夜夜| 久久精品夜色噜噜亚洲a∨ | 欧美在线播放视频| 香蕉久久一区二区不卡无毒影院 | 99国产麻豆精品| 欧美色区777第一页| 亚洲资源av| 欧美一区二区免费| 亚洲福利久久| 在线亚洲自拍| 在线日韩av片| 99re66热这里只有精品3直播| 欧美成人免费在线| 一本色道久久综合狠狠躁篇的优点 | 亚洲专区在线视频| 亚洲欧美日韩综合aⅴ视频| 国产一区二区三区四区五区美女 | 免费亚洲电影在线| 免费试看一区| 亚洲尤物在线| 久久激情视频免费观看| 亚洲美女在线观看| 亚洲女性裸体视频| 亚洲欧洲一区二区在线播放| 一区二区三区视频免费在线观看| 国内免费精品永久在线视频| 亚洲国产第一| 国产伦精品一区二区三区照片91| 欧美福利影院| 国产欧美日韩一区二区三区在线观看| 久久久久久9999| 欧美激情亚洲综合一区| 一区二区三区四区在线| 久久精品亚洲一区二区三区浴池| 亚洲国产欧美一区二区三区久久 | 亚洲午夜av| 香蕉成人久久| 亚洲一区二区三| 欧美国产高潮xxxx1819| 久久成人综合视频| 欧美午夜精品久久久| 男女精品网站| 国产欧美日韩精品丝袜高跟鞋| 亚洲观看高清完整版在线观看| 国产欧美日韩精品在线| 99国产精品一区| 亚洲人成小说网站色在线| 久久久精品网| 久久久亚洲精品一区二区三区 | 一本一本久久a久久精品牛牛影视| 久久高清免费观看| 亚洲欧美国产高清| 欧美精品久久久久久久免费观看| 久久婷婷蜜乳一本欲蜜臀| 国产精品久久久999| 亚洲人成在线观看| 亚洲国产国产亚洲一二三| 久久精品国产清高在天天线| 先锋影院在线亚洲| 欧美日韩一二三四五区| 亚洲精品综合| 99在线视频精品| 欧美精品福利视频| 在线精品视频免费观看| 欧美在线啊v| 欧美视频中文在线看| 999亚洲国产精| 这里是久久伊人| 欧美视频在线观看一区| 日韩视频中文字幕| 这里只有精品丝袜| 欧美日韩一区二区高清| 日韩一二在线观看| 亚洲影院色无极综合| 国产精品久久久久久亚洲毛片| 亚洲午夜久久久久久尤物 | 久久久91精品| 国内精品久久久久影院薰衣草 | 久久人人精品| 亚洲国产另类 国产精品国产免费| 亚洲激情网站| 欧美视频一区二区三区| 亚洲一区中文| 麻豆精品网站| 亚洲欧洲一二三| 欧美三级日本三级少妇99| 亚洲午夜精品视频| 麻豆国产精品777777在线 | 午夜在线观看欧美| 国产无一区二区| 久久全球大尺度高清视频| 亚洲激情另类| 欧美一区二区三区精品电影| 亚洲欧美综合网| 国产尤物精品| 欧美精品麻豆| 亚洲欧美日韩精品久久| 欧美刺激午夜性久久久久久久| 99国产精品一区| 国产一区亚洲一区| 欧美黄在线观看| 午夜精品美女自拍福到在线| 久热精品视频在线观看一区| 亚洲另类春色国产| 国产欧美精品久久| 毛片一区二区| 午夜免费久久久久| 日韩一区二区久久| 欧美寡妇偷汉性猛交| 中日韩男男gay无套| 韩日成人av| 国产精品久久网站| 欧美激情一区二区三区在线视频| 欧美一区二区三区免费在线看| 亚洲精品一区二区三| 美女视频黄免费的久久| 午夜精品久久久久影视 | 欧美亚洲系列| 亚洲精品日韩欧美| 国产午夜精品福利| 国产精品久久久久久久久借妻 | 欧美日韩精品福利| 久久免费黄色| 久久av二区| 亚洲欧美在线网|