[tin học] Giải thuật đệ quy quay lui

Mã:

Uses   crt;

Const

      fi                      =        ‘luoi.txt’;

      fo                      =        ‘luoi.out’;

      d                      :         array[1..4] of  integer=(-1,0,1,0);

      c                      :         array[1..4] of  integer=(0,1,0,-1);

Var

      a                      :         array[1..100,1..100] of  integer;

      b                      :        array[0..101,0..101] of  integer;

      f                        :         text;

      n,m,sh,max      :         integer;

      vmax,dem,r,s    :         integer;


[B]procedure nhap;[/B]

    var   i,j     :    integer;

    begin

          assign(f,fi);reset(f);

          readln(f,n,m);

          for i:=1 to n do

              begin

                  for j:=1 to m do

                        read(f,a[i,j]);

                  readln(f);

              end;

          for i := 0 to n+1 do

          for j := 0 to m+1 do

            if (i = 0) or (i = n+1)or(j = 0)or( j = m+1) then

                  b[i,j] :=-1

              else

                b[i,j] := 0;

          max := – maxint;

          sh := 0;

          close(f);

   end;


function kiemtra(p,q : integer) : boolean;

  var  t,i          : integer;

    begin

        t :=abs(p+q);

        if t mod 2 = 0 then

                lienthong := true

        else

                kiemtra :=false;

    end;


procedure lt(x,y : integer);

    var   k         : integer;

begin

      b[x,y] := sh;

    for k := 1 to 4 do

    if (kiemtra(a[x,y], a[x+d[k],y+c[k]]))and(b[x+d[k],y+c[k]]= 0) then

            begin

                  inc(dem);

                  lt(x + d[k], y + c[k]);

            end;

    if dem > max then

          begin

              max : = dem;

              vmax : =sh;

          end;

    end;


procedure thong_bao

var t,i,j         : integer;

begin

    assign(f,fo);rewrite(f);

    writeln(f,’ so vung lien thong la: ‘,sh);

    for t := 1 to sh do

        begin

          write(f, ‘vung lien thong thu ‘, t,’ : ‘);

              for i := 1 to n do

                for j := 1 to m do

                    if b[i,j] = t then

                         write(f,'(‘,i,’,’,j,’)’,’ ‘);

          writeln(f);

        end;

    writeln(f,’ so vung lien thong lon nhat la: ‘);

        for i:=1 to n do

            for j:=1 to m do

              if b[i,j] = vmax then

                    write(f,'(‘,i,’,’,j,’)’,’ ‘);


 end;

{============= Chuong trinh chinh ====================}

BEGIN

    nhap;

    for r:=1 to n do

          for s:=1 to m do

              if b[r,s] = 0 then

                begin

                      dem:=1;

                      inc(sh);

                      lt(r,s);

                end;

    thong_bao;

    close(f);

END.