Maksymalny przepływ w grafie.

0

Witam, mam taki problem, ze posiadam kod w C na maksymalny przeplyw w grafie, jednak chcialbym go zamienic, na kod Pascalowy, czy jest osoba ktora pomogła by mi to zrobic ??

Zamieszczam kod w C

#include <iostream>
#include <list>

using namespace std;

main()
{
  const int MAXINT = 2147483647;
  int n, m, s, t, fmax, cp, x, y, esc, i, j;
  list <int> q;
    
  cin >> n >> m;
  
  int C[n+1][n+1], F[n+1][n+1];
  
  int p[n+1], cfp[n+1];              
  
  for(i = 1; i <= n; i++)
    for(j = 1; j <= n; j++) F[i][j] = C[i][j] = 0;
      
  for(i = 1; i <= m; i++)
  {
    cin >> x >> y >> cp;
    C[x][y] = cp;        
  }

  cin >> s >> t;
  
  fmax = 0;

  do
  {

    for(i = 1; i <= n; i++) p[i] = 0;

    p[s] = -1;

    cfp[s] = MAXINT;

    q.clear(); q.push_back(s);

    esc = 0;

    while(q.size())
    {

      x = q.front(); q.pop_front();

      for(y = 1; y <= n; y++)
      {

        cp = C[x][y] - F[x][y];

        if(cp && !p[y])
        {

          p[y] = x;

          cfp[y] = cfp[x] > cp ? cp : cfp[x];

          if(y == t)
          {

             fmax += cfp[t];

             while(y != s)
             {
               x = p[y];
               F[x][y] += cfp[t];
               F[y][x] -= cfp[t];
               y = x;        
             } 
                          
             esc = 1; break;   
          } 
          q.push_back(y); 
     
        }     

      }

      if(esc) break;              

    } 

    if(!esc) break;

  } while(true);
  
  cout << "\nfmax = " << fmax << endl << endl;
  
  for(x = 1; x <= n; x++)
    for(y = 1; y <= n; y++)
      if(C[x][y])
        cout << x << " -> " << y << " "
             << F[x][y] << "/" << C[x][y] << endl;
                   
  cout << endl;
  system("PAUSE");
}

A o to moj kod pascalowy

program maksymalny_przeplyw;
uses crt;
type
tablica=array [0..20,0..20] of integer;
tablica2=array[0..20] of integer;

wsk_element=^element;
Element=RECORD
dane : integer;
nastepny : wsk_element;
end;

var n,m,x,y,cp,i,j,s,t,fmax,esc:integer;
    C,F:tablica;
    p,cfp:tablica2;

    liczba : integer;
    poczatek : wsk_element;
    koniec : wsk_element;
    pentla:boolean;

procedure do_kolejki(VAR poczatek, koniec : wsk_element; liczba : integer);
          VAR
          temp : wsk_element;
          BEGIN
               temp:=koniec;
               new(koniec);
               koniec^.dane:=liczba;
               IF (temp<>nil) THEN temp^.nastepny:=koniec
               ELSE poczatek:=koniec;
               END;

procedure z_kolejki(VAR poczatek, koniec : wsk_element; VAR liczba : integer);
          VAR
          temp : wsk_element;
          BEGIN
               liczba:=poczatek^.dane;
               temp:=poczatek^.nastepny;
               dispose(poczatek);
               poczatek:=temp;
               IF (poczatek=nil) THEN koniec:=nil;
               END;


begin
clrscr;
writeln('Ilosc wierzcholkow');
readln(n);
writeln('Ilosc krawedzi');
readln(m);

for i:=1 to n do
    for j:=1 to n do
        begin
        C[i,j]:=0;
        F[i,j]:=0;
        end;

for i:=1 to m do 
    begin
    writeln('x,y,cp');
    readln(x,y,cp);
    C[x,y]:=cp;
    end;

writeln('Start');
readln(s);
writeln('Koniec');
readln(t);

{**********}
fmax:=0;
pentla:=true;
while (pentla=true) do
                     begin
                     for i:=1 to n do p[i]:=0;
                     p[s]:=-1;
                     cfp[s]:=32000;
                     do_kolejki(poczatek, koniec, s);

                     while (poczatek<>nil) do
                                           begin
                                           z_kolejki(poczatek, koniec, x);

                                           for y:=1 to n do begin
                                                                 cp:=C[x,y] - F[x,y];
                                                                 if ((cp=0) or (p[y]<>0)) then
                                                                                           begin
                                                                                           p[y]:=x;
                                                                                           if (cfp[x]>cp) then cfp[y]:=cp else cfp[y]:=cfp[x];
                                                                                           if (y=t) then
                                                                                           begin
                                                                                           fmax:=fmax+cfp[t];
                                                                                           while (y <> s) do
                                                                                           begin
                                                                                           x:=p[y];
                                                                                           F[x,y]:=F[x,y]+cfp[t];
                                                                                           F[y,x]:=F[y,x]-cfp[t];
                                                                                           y:=x;
                                                                                           end;    //koniec while (y <> s)
                                                                                           end;    //koniec if (y=t)
                                                                 do_kolejki(poczatek,koniec,y);
                                                                 end;//koniec if ((cp=0) or (p[y]<>0))
                                           end; // koniec for y:=1 to n do
end; // while (poczatek<>nil)
end; // while (pentla=false)
writeln('fmax',fmax);
for x:=1 to n do 
for y:=1 to n do
if (C[x,y]<>0) then writeln (x,' -> ',y,'  ',F[x,y],'/',C[x,y]);
readkey;
end.

Bardzo prosiłbym o pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1