http://virtual-object.narod.ru
 
    Virtual Object :: Programs :: Поиск максимального паросочетания
  Download
 
Наша кнопка
Поиск максимального паросочетания в двудольном графе
{$APPTYPE CONSOLE}

var a:array [1..250,1..250] of 0..1; ⁄⁄ m*n
b,c:array [1..250] of longint;
f:array [0..250] of boolean;
n,m,i,res:longint;
x:longint;
⁄⁄---------------------------------------------------
function test(x:longint):boolean;
var i:longint;
begin
 test:=false;
 if f[x] then exit;
 f[x]:=true;
 for i:=1 to m do
 if (a[i,x]>0) and ((b[i]=0)or(test(b[i]))) then
  begin
   b[i]:=x;
   c[x]:=i;
   test:=true;
   exit;
  end;
end;
⁄⁄---------------------------------------------------
begin
 assign(input,′input.txt′);reset(input);
 assign(output,′output.txt′);rewrite(output);
 readln(n,m);
 res:=0;
 fillchar(a,sizeof(a),0);
 for i:=1 to n do
  begin
   while not seekeoln(input) do
    begin
     read(x);
     a[x,i]:=1;
    end;
   readln;
  end;
 for i:=1 to n do
  begin
   fillchar(f,sizeof(f),false);
   f[0]:=true;
   if test(i) then inc(res);
  end;
  writeln(res);
  for i:=1 to 250 do
   if c[i]<>0 then writeln(i,′ ′,c[i])
end.
  JavaScript
  Animation
  Links
 
  Mail
 
 
 

Object © 2004 - 2005. All rights reserved.

 
Сайт создан в системе uCoz