robipart.pas

来自「This ar the basic programs that i did in」· PAS 代码 · 共 82 行

PAS
82
字号
type stiva=array[1..50] of integer;
var st:stiva;
    a:array[1..50,1..50]of integer;
    m,n,i,j,k,p:integer;
    as,ev,ok:boolean;
    f:text;
procedure init(var st:stiva;k:integer);
begin
st[k]:=0;
end;
procedure succesor(var st:stiva;k:integer;var as:boolean);
begin
if st[k]<2 then begin
                inc(st[k]);
                as:=true;
                end
           else as:=false;
end;
procedure valid(st:stiva;k:integer;var ev:boolean);
var i:integer;
begin
ev:=true;
for i:=1 to k-1 do
  if (a[i,k]=1) and (st[i]=st[k]) then ev:=false;
end;
function solutie(st:stiva;k:integer):boolean;
begin
solutie:=(k=n);
end;
procedure tipar(st:stiva;k:integer);
var i,p,q:integer;
begin
write('multimea1: ');
p:=0;
q:=0;
for i:=1 to k do
       if st[i]=1 then  begin
                        write(i,' ');
                        inc(p);
                        end;
writeln;
write('multimea2: ') ;
for i:=1 to k do
   if st[i]=2 then  begin
                    write(i,' ');
                    inc(q);
                    end;
writeln;
if m=p*q  then write('bipartit complet ')
         else writeln('nu e bipatrit complet ');
end;
begin
assign(f,'graf.txt');
reset(f);
readln(f,m,n);
for k:=1 to m do begin
                 readln(f,i,j);
                 a[i,j]:=1;
                 a[j,i]:=1;
                 end;
close(f);
ok:=true;
k:=1;
init(st,k);
while k>0 do begin
             repeat
             succesor(st,k,as);
             if as then valid(st,k,ev);
             until (not as) or (as and ev);
if as then
      if solutie(st,k) then tipar(st,k)
                       else begin
                            inc(k);
                            init(st,k);
                            end
      else dec(k);
end;
readln;
end.


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?