程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> POJ 3692(匈牙利算法)

POJ 3692(匈牙利算法)

編輯:C++入門知識

[delphi] 
Program P3692; 
const 
   maxn=200; 
 
var 
   n,m,l,i,j,k,ans,x,y:longint; 
   b:array[1..400] of boolean; 
   map:array[1..400,1..400] of boolean; 
   a:array[1..400] of longint; 
function find(x:longint):boolean; 
var 
   i,j:longint; 
begin 
   for i:=1 to m do 
      if not(b[i]) and (map[x,i]) then 
      begin 
         b[i]:=true; 
         if a[i]=0 then begin a[i]:=x; exit(true); end; 
         if find(a[i]) then begin a[i]:=x; exit(true); end; 
      end; 
 
   exit(false); 
end; 
begin 
   i:=1; 
   read(n,m,l); 
   while (n+m+l>0) do 
   begin 
      ans:=0; 
      fillchar(a,sizeof(a),0); 
      fillchar(map,sizeof(map),true); 
      for k:=1 to l do 
      begin 
         read(x,y); 
         map[x,y]:=false; 
      end; 
      for k:=1 to n do 
      begin 
         fillchar(b,sizeof(b),false); 
         if find(k) then inc(ans); 
      end; 
      writeln('Case ',i,': ',n+m-ans); 
      inc(i); 
      read(n,m,l); 
   end; 
end. 

匈牙利算法:www.2cto.com
b[]保存當前找交錯路P的各點是否已被連通,a[]表示某點之前的點
本題的2分圖是取最大團(各點互相連通),利用2分圖性質,可看成補圖的最大獨立集(各點互不連通)……

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved