Documente Academic
Documente Profesional
Documente Cultură
IMPLEMENTĂRI ÎN
LIMBAJUL PASCAL
uses crt;
type
{lista vecinilor}
ptnod1=^nod1;
nod1=record
vecin:byte;
leg1:ptnod1;
end;
var
prim,actual,ultim:ptlnod;
vp,va,vu:ptnod1;
inf,n,i,j,m:byte;
begin
clrscr;
write('Numarul de noduri:');
readln(n);
prim:=nil; ultim:=nil;
{crearea listei L_nod}
for i:=1 to n do
begin
new(actual);
actual^.nod:=i;
actual^.leg:=nil;
{crearea listei vecinilor}
write('Numarul de vecini ai nodului ',i,':');
readln(m);
vp:=nil;va:=nil;
Programarea calculatoarelor. Aplicaţii
for j:=1 to m do
begin
new(va);
write('Vecinul ',j,':');
readln(inf);
va^.vecin:=inf;
va^.leg1:=nil;
if vp=nil then
begin
vp:=va;vu:=va;
end
else
begin
vu^.leg1:=va;vu:=va;
end;
end;
actual^.ptvecini:=vp;
if prim=nil then
begin
prim:=actual;
ultim:=actual;
end
else
begin
ultim^.leg:=actual;
ultim:=actual;
end;
end;
{scrierea grafului nod-vecin}
writeln;
actual:=prim;
while actual<>nil do
begin
write('Nodul ',actual^.nod,' are vecinii:');
vp:=actual^.ptvecini;
while vp<>nil do
begin
write(vp^.vecin,' ');
vp:=vp^.leg1;
end;
writeln;
actual:=actual^.leg;
end;
readln;
end.
uses crt;
type
ptstiva=^stiva;
stiva=record
inf:byte;
leg:ptstiva;
end;
var
prim:ptstiva;
c:array[1..20] of byte;
a:array[1..20,1..20] of byte;
i,j,k,n:byte;
gata:boolean;
procedure push(var p:ptstiva;i:byte);
var a:ptstiva;
begin
new(a);
a^.inf:=i;
a^.leg:=p;
p:=a;
end;
procedure pop(var p:ptstiva;var i:byte);
var a:ptstiva;
begin
if p<>nil then
begin
i:=p^.inf;
a:=p;
p:=p^.leg;
dispose(a);
end;
end;
function urm(i:byte):integer;
var k:byte;
gasit:boolean;
begin
k:=1;
gasit:=false;
while(k<=n)and not gasit do
if (a[i,k]=1) and (c[k]=0)then
begin
gasit:=true; urm:=k;
end
else inc(k);
Programarea calculatoarelor. Aplicaţii
uses crt;
type
vector=array[1..20]of integer;
mat=array[1..200,1..2] of integer;
var a,e,e0:mat;
v,v0:vector;
i,j,k,m,n,l:integer;
dv,dv0,de,de0:integer;
gata:boolean;
procedure copiaza(var v1,v2:vector;n:integer);
var i:byte;
begin
for i:=1 to n do
v2[i]:=v1[i];
end;
procedure adauga(var v:vector;var n:integer;el:integer);
var i:integer;
adaug:boolean;
begin
i:=1;
adaug:=true;
while adaug and(i<=n) do
if el=v[i] then
daug:=false
else i:=i+1;
if adaug then
begin
n:=n+1;
v[n]:=el;
end;
end;
procedure mcopiaza(var v1,v2:mat;n:integer);
var i:byte;
begin
for i:=1 to n do
begin
v2[i,1]:=v1[i,1];
v2[i,2]:=v1[i,2];
end;
end;
procedure madauga(var v:mat;var n:integer;el1,el2:integer);
var i:integer;
adaug:boolean;
begin
Programarea calculatoarelor. Aplicaţii
i:=1;adaug:=true;
while adaug and(i<=n) do
if ((el1=v[i,1])and(el2=v[i,2])) or
((el1=v[i,2])and(el2=v[i,1]))
then adaug:=false
else i:=i+1;
if adaug then
begin
n:=n+1;
v[n,1]:=el1;
v[n,2]:=el2;
end;
end;
begin {program principal}
clrscr;
write('Numarul de varfuri:');
readln(n);
write('Numarul de muchii:');
readln(m);
for i:=1 to m do
for j:=1 to 2 do
begin
write('a[',i,',',j,']=');
readln(a[i,j]);
end;
write('Varful pentru care se det. comp. conexa:');
readln(k);
v0[1]:=k;
dv:=1;
dv0:=1;
de:=0;
de0:=0;
v[1]:=k;
gata:=false;
repeat
for l:=1 to dv0 do
for j:=1 to m do
if (a[j,1]=v0[l])then
begin
madauga(e,de,a[j,1],a[j,2]);
adauga(v,dv,a[j,2])
end
else if (a[j,2]=v0[l])then
begin
adauga(v,dv,a[j,1]);
madauga(e,de,a[j,2],a[j,1]);
end;
if (dv0=dv)and(de0=de) then
gata:=true
else begin
copiaza(v,v0,dv);
mcopiaza(e,e0,de);
dv0:=dv;
de0:=de;
end;
until (gata);
for i:=1 to dv do
write(v[i],' ');
writeln;
for i:=1 to de do
writeln(e[i,1],'---->',e[i,2]);
Grafuri. Implementări în limbajul Pascal
readln;
end.
function minim(x,y:real):real;
begin
if x<y then minim:=x
else minim:=y;
end;
begin
clrscr;
write('Numarul de varfuri ale grafului:');
readln(n);
writeln('Matricea ponderilor:');
for i:=1 to n do
for j:=1 to n do
if i<>j then
begin
write('w[',i,',',j,']=');
readln(w[i,j]);
d[i,j]:=w[i,j];
end
else begin
w[i,j]:=10000;
d[i,j]:=10000;
end;
write('Varful dorit:');
readln(k);
for i:=1 to n do v[i]:=1;
v[k]:=0;b[k]:=0;
for i:=1 to n do
begin
min:=10000;
for j:=1 to n do
if (v[j]=1)and(d[k,j]<min)then
begin
j0:=j;
min:=d[k,j];
end;
for j:=1 to n do
d[k,j]:=minim(d[k,j],d[k,j0]+d[j0,j]);
v[j0]:=0;
b[j0]:=d[k,j0];
end;
writeln('Distantele minime de la ',k,' la celelalte varfuri ');
for i:=1 to n do
begin
write(k,'---->',i);
writeln(':',b[i]);
end;
readln;
Programarea calculatoarelor. Aplicaţii
end.
Exerciţii
L( Γ )=Q(v0,v), pentru toţi v∈V\{v0} unde v0 este un vârf fixat al unui graf ponderat
conex.