Sunteți pe pagina 1din 24

Problema 1

Se dau n orae. Se cunoate distana dintre oricare dou orae. Un


distribuitor de carte caut s-i fac un depozit n unul dintre aceste orae. Se
cere s se gseasc traseul optim de la depozit ctre celelalte orae astfel nct
distana total pe care o va parcurge pentru a distribui n toate celelalte n-1 orae
s fie minim. S se precizeze care ar fi oraul n care s se afle depozitul
pentru ca toate celelalte orae s fie uor accesibile {din acel centru de
depozitare s se poat pleca spre ct mai multe alte orae.
Rezolvare:
program ora!depozit"
uses crt"
t#pe muc$ie%record
vf1& vf'& cost(integer"
end"
t#pe vector%arra#)1..1**+ of longint"
vector1%arra#)1..1**+ of muc$ie"
matrice%arra#)1..,*&1..,*+ of longint"
var n& i& -& .& v& cost(integer"
s& t(vector(
/(vector1"
a(matrice"
f(te/t"
procedure citire"
var i& -& m(integer"
begin
assign 0f& 1depozit.t/t23"
reset 0f3"
readln 0f& n3" m(%*"
4$ile not eof0f3 do
begin
inc0m3"
read 0f&/)m+.vf13"
read 0f&/)m+.vf'3"
read 0f&/)m+.cost3"
end"
for i(%1 to m do
begin
a)/)i+.vf1& /)i+.vf'(%/)i+.cost+"
a)/)i+.vf'& /)i+.vf1(%/)i+.cost+"
end"
4riteln 01matricea costurilor este(23"
for i(%1 to n do
begin
for -(%1 to n do
4rite 0a)i&-+& 1 13"
2
4riteln"
end"
end"
procedure prim"
var i& -& min(integer"
begin
for i(% to n do
s)i+(%v"
s)v+(%*
for i(%1 to n do
t)i+(%*"
cost(%*"
for .(%1 to n-1 do
begin
min(%ma/int"
for i(%1 to n do
if 0s)i+56*3 t$en
if 0a)s)i+& i+5min3 and 0a)s)i+& i+56*3 t$en
begin
min(%a)s)i+& i+"
-(%1"
end"
t)-+(%s)-+"
cost(%cost7a)-& s)-++"
s)-+(%*
for i(%1 to n do
if 0s)i+56*3 t$en
if 0a)i&s)i++%*3 or 0a)i&s)i++6a)i&-+3 t$en
if a )i&-+56* t$een
s)i+(%-"
end"
end"
function fii0/(integer3(integer"
var .(integer"
begin
.(%*"
for i(%1 to n do
if t)i+%/ t$en
inc0.3"
fii(%."
end"
procedure tata0v(integer3"
var i(integer"
begin
for 8(%1 to n do
if t)v+%i t$en
3
begin
t)i+(%v"
t)v+(%*"
end"
end"
procedure ora"
var ma/&i&-(integer"
begin
ma/(%*"
for i(%1 to n do
if fii0i36ma/ t$en
ma/(%fii0i3"
4riteln01orasele optime sunt(23
for i(%1 to n do
if fii0i3%ma/ t$en
begin
4rite0i&2 13"
tata0i3"
4rite 01vectorul tata este(23"
for -(%1 to n do 4rite0t)-+& 1 13"
4riteln"
end"
end"
begin
clrscr"
citire"
4riteln01dati vf de pornire23 " readln0v3 "
prim "
4riteln01costul arborelui este (2& cost3 "
oras"
read.e# "
end.
Problema 2
Se d un graf neorientat. S se creeze un arbore parial de cost minim
care s poat fi memorat apoi sub forma unei liste.
Rezolvare:
9rogram arbore!lista"
uses crt"
t#pe muc$ie%record
vf1& vf'& cost(integer"
end"
t#pe vector%arra#)1..,*+ of longint"
vector1%arra#)1..1**+of muc$ie"
matrice%arra#)1..'*&1..,*+of longint
var n&i&-&.&v&cost&#&z&m(integer"
s&t&s1&t1(vector"
4
/(vector1"
a&a1(matrice"
f(te/t"
procedure citire"
var i&-&m(integer"
begin
assign 0f& 2depozit.t/t23"
reset 0f3"
readln 0f&n3" m(%*"
4$ile not eof 0f3 do
begin
inc0m3"
read 0f&/)m+.vf13"
read 0f&/)m+.vf'3"
read 0f&/)m+.cost3"
readln 0f3"
end"
for i(%1 to m do
begin
a)/)i+.vf1& /)i+.vf'(%/)i+.cost+"
a)/)i+.vf'& /)i+.vf1(%/)i+.cost+"
end"
4riteln 0 2matricea costurilor este(23"
for i(%1 to n do
begin
for -(%1 to n do
4rite 0a)i&-+& 2 23"
4riteln
end"
end"
function fii 0#(integer3(integer"
var .&-(integer"
begin
.(%*"
for -(%1 to n do
if t)-+%# t$en
inc0.3"
fii(%."
end"
procedure prim 0a(matrice3"
var i&-&min(integer"
begin
min(%ma/int"
for i(%1 to n do
if 0s)i+56*3 t$en
if 0a)s)i+& i+5min3 and 0a)s)i+&i+56*
5
t$en
begin
min(%a)s)i+& i+"
-(%i"
end"
if 000s)-+56v3 and 0fii0s)-+3%*33 or 0s)-+%v3 and 0fii0s)-+35%1333 t$en
begin
t)-+(%s)-+"
cost(%cost7a)-&s)-++"
s)-+(%*"
for i(%1 to n do
if 0s)i+56*3 t$en
if 0a)i&s)i++%*3 or 0a)i&s)i++6a)i&-+3 t$en
if a)i&-+56* t$en
s)i+(%-"
inc0m3"
end"
else
begin
a1(%a"
a1)s)-+&-+(%*"
prim 0a13"
end"
end"
begin
clrscr"
citire"
4riteln02dati vf de pornire23" readln0v3"
m(%*"
for i(%1 to n do
s)i+(%v"
s)v+(%*"
for i(%1 to n do
t)i+(%*"
cost(%*"
repeat prim0a3"
until m%n-1"
4rite 02vectorul tata este(23"
for i(%1 to n do
4rite 0t)i+& 2 23"
4riteln"
4riteln 02costul arborelui este(2 & cost3"
read.e#"
end.
Problema 3
6
Se d un graf orientat i se cere s se afle dac e/ist un arbore parial
de cost minim. :ar o arborescen de cost minim; :ac e/ist s se afle care
este este vrful acesteia.
Rezolvare
program arborescenta"
uses crt"
t#pe muc$ie%record
vf1&vf'&cost(integer"
end"
t#pe vector%arra#)1..1**+ of longint"
vector1%arra#)1..1**+ of muc$ie"
matrice%arra#)1..,*&1..,*+ of longint"
var n&i&-&.&v&cost(integer"
s&t(vector"
/(vector1"
a(matrice"
f(te/t"
procedure citire"
var i&-&m(integer"
begin
assign0f&<orient.t/t<3"
reset0f3"
readln0f&n3"m(%*"
4$ile not eof0f3 do
begin
inc0m3"
read0f&/)m+.vf13"
read0f&/)m+.vf'3"
read0f&/)m+.cost3"
readln0f3"
end"
for i(%1 to m do
a)/)i+.vf1&/)i+.vf'+(%/)i+.cost"
4riteln0<=atricea costurilor este(<3"
for i(%1 to n do
begin
for -(%1 to n do
4rite0a)i&-+&< <3"
4riteln"
end"
end"
procedure prim"
var i&-&min(integer"
begin
for i(%1 to n do
s)i+(%v"
7
s)v+(%*"
for i(%1 to n do
t)i+(%*"
cost(%*"
for .(%1 to n-1 do
begin
min(%ma/int"
for i(%1 to n do
if 0s)i+56*3 t$en
if 0a)s)i+&i+5min3 and 0a)s)i+&i+56*3 t$en
begin
min(%a)s)i+&i+"
-(%i"
end"
t)-+(%s)-+"
cost(%cost7a)s)-+&-+"
s)-+(%*"
for i(%1 to n do
if 0s)i+56*3 t$en
if 0a)s)i+&i+%*3 or 0a)s)i+&i+6a)-&i+3 t$en
if a)-&i+56* t$en
s)i+(%-"
end"
end"
begin {main
clrscr"
citire"
4riteln0<:ati vf de pornire><3"readln0v3"
prim"
4riteln0<?ectorul tata este(<3"
for i(%1 to n do
4rite0t)i+&< <3"
4riteln0<@ostul arborelui este(<&cost3"
read.e#"
end.
Problema 4
Se d un graf cone/. Se cere mprirea acestuia n m arbori pariali de
cost minim fiecare cu p vrfuri. S se afieze aceti arbori.
Rezolvare
program arbori"
uses crt"
t#pe vector%arra#)1..1**+ of longint"
program m!arbori"
uses crt"
t#pe vector%arra#)1..1**+ of longint"
matrice%arra#)1..,*&1..,*+ of longint"
8
var n&i&-&.&v&cost&p&m(integer"
s&t(vector"
a(matrice"
f(te/t"
procedure citire"
var i&-(integer"
begin
assign0f&<prim.t/t<3"
reset0f3"
readln0f&n3"
for i(%1 to n do
begin
for -(%1 to n do
read0f&a)i&-+3"
readln0f3"
end"
4riteln0<=atricea costurilor este(<3"
for i(%1 to n do
begin
for -(%1 to n do
4rite0a)i&-+&< <3"
4riteln"
end"
end"
procedure prim"
var i&-&min&$(integer"
begin
cost(%*"
for $(%1 to p-1 do
begin
min(%ma/int"
for i(%1 to n do
if 0s)i+6*3 t$en
if 0a)s)i+&i+5min3 and 0a)s)i+&i+56*3 t$en
begin
min(%a)s)i+&i+"
-(%i"
end"
t)-+(%s)-+"
cost(%cost7a)-&s)-++"
s)-+(%*"
4rite0-&< <3"
for i(%1 to n do
if 0s)i+6*3 t$en
if 0a)i&s)i++%*3 or 0a)i&s)i++6a)i&-+3 t$en
if a)i&-+56* t$en
9
s)i+(%-"
t)-+(%-1"
s)-+(%-1"
for i(%1 to n do
begin
a)i&-+(%*"
a)-&i+(%*"
end"
end"
4rite0<@ostul arborelui este(<&cost3"
end"
begin {main
clrscr"
citire"
4riteln0<:ati vf de pornire><3"readln0v3"
4rite0<m%<3"read0m3"
4rite0<p%<3"read0p3"
for i(%1 to n do
s)i+(%v"
s)v+(%*"
for i(%1 to n do
t)i+(%*"
for .(%1 to m-1 do
begin
for i(%1 to n do
begin
if t)i+%* t$en
begin
4rite0i&< <3"
prim"
for -(%1 to n do
if t)-+%* t$en s)-+(%i"
s)i+(%-1"4riteln"
end"
s)v+(%-1"
t)v+(%-1"
end"
end"
read.e#"
end.
Problema 5
Se definete o muc$ie a unui graf neorientat ca fiind o nregistrare cu trei
cmpuri& dou vrfuri e/tremiti i un cost afiare. S se afieze muc$ia de cost
minim.
Rezolvare
9rogram cost"
10
t#pe muc$ie%record"
vf1& vf'& cost(integer"
end"
var v(arra#)1..1**+ of muc$ie"
m&n(integer"
procedure citire"
var i(b#te"
begin
read0m3" read0n3"
for i(%1to m do 4it$ v0i3 do
repeat
read0vf1& vf'& cost3"
until 0vf16%13and0vf15%n3and0vf'6%13and0vf'5%n3and0vf156vf'3and
0cost6*3"
min(%v)i+.cost"
for i(%'to m do if v)i+.cost%min t$en
min(%v)i+.cost"
for i(%1 to m do if v)i+.cost%min t$en
4riteln0i3"
end.
Problema 6
Se definete o muc$ie a unui graf neorientat ca o nregistrare de trei
corpuri& cele dou vrfuri e/tremiti i un cost apreciat muc$iei. :efinim un graf
neorientat ca vector al muc$iilor. Se d n6%numrul de noduri. S se
construiasc i s se afle matricea de adiacen i apoi s se determine costul
mediu.
Rezolvare:
9rogram matrice"
t#pe muc$ie%record"
vf1& vf'& cost(integer"
end"
t#pe mat(%arra#)1..1**&1..1**+ of b#te
var v(arra#)1..1**+ of muc$ie
i&-&m&n(integer" s(integer"
procedure citire"
var v(b#te" med(real" s"integer"
begin
for i(%1 to n do
for -(%1 to n do a)i&-+(%*
begin
read 0m&n3
for i(%1 to m 4it$ v)i+ do begin
repeat
read 0vf1& vf'& cost3"
until0vf16%13and0vf15%n3and0vf'6%13and0vf'5%n3and0vf156vf'3and
0cost6*3"
11
a)vf1&vf'+(1
end"
for i(%1 to n do
for -(%1 to n do
4rite 0a)i&-+3"
end.
Problema 7
Se considera un graf neorientat cu n varfuri numerotate 1..n. @ele n varfuri
reprezentand orase. Un automobil pleaca dintr-un oras start& trece prin toate
orasele o singura data si revine in orasul din care a plecat. Sttind ca intre unele
orase e/ista drumuri directe si intre altele nu sa se afiseze toate traseele pe care
le poate urma automobilul.
Rezolvare :
9rogram orase "
t#pe mat%arra#)1..1**&1..1**+ of *..1"
vec%arra#)1..1**+ of b#te"
var a(mat" st(vec" start& n (integer"
procedure citire"
var i(integer"
begin
read0n3"
for i(%1to n do a)i&-+(%*"
for i(%1 to n-1 do
for -(%i71to n do
begin
read a)i"-+"
a)-&i+(%a)i&-+
end"
for i(%1 to n do st)i+(%*"
repeat
read 0start3
until 0start6%13and0start5%n3"
st)i+(%start
end"
procedure tipar0p(b#te3"
var i(b#te"
begin
for i(%1 to p do 4rite 0st)p+& 1 23"
end"
function valid0p(b#te3(boolean"
var i(b#te" t(boolean"
begin
t(%true
for i(%1 to p-1 do
if st)i+(%st)p+ t$en t(%false
if a)st)p+& st)p-1++%o t$en t(%false
12
valid(%t"
end"
procedure b.tr0p(b#te3"
var .(b#te"
begin
for .(%1 to n do
begin
st)p+(%."
if valid 0p3 t$en
if 0p%n3and 0a)st)1+&st)p++%13 t$en
tipar0p3"
else b.tr0p713
end"
end"
begin
b.tr0'3"
read0n3"
end.
Problema 8
S se afieze punctele izolate dintr-un graf neorientat.
Rezolvare:
9rogram puncte izolate
t#pe mat%arra#)1..'*&1..'*+of integer"
var n(integer& a(mat"
procedure citire"
var i&-(integer"
begin
readln0n3"
for i(%1 to n do a)i&-+(%*
for i(%1 to n-1 do
for -(%i71 to n do
begin
repeat
read a)i"-+(%*
until a)i"-+(%1 or a)i&-+(%* or a)-&i+(%1"
end"
end"
procedure izolare"
var s&i&-(integer"
begin
for i(%1 to n do
begin
s(%*"
for -(%1 to n do
13
s(%s7a)i&-+"
if s%a t$en 4riteln 0i& 2este nod izolat23"
end"
citire izolate"
end.
Problema 9
:in fiierul te/t se afl numere ntregi aflate pe un singur rnd& separate
prin spaii. S se verifice dac secvena de numere formeaz lan elementar sau
neeelementar ntr-un graf neorientat. Araful este dat prin matricea de adiacen
i se citete de la tastatur.
Rezolvare:
9rogram lan"
var a(arra#)1..,*&1..,*+ of *..1"
v(arra#)1..,*+ of b#te"
n(b#te" f(te/t"
procedure init"
var i&-(b#te"
begin
readln0n3"
for i(%1 to n do a)i&-+(%*"
for i(%1 to n-1 do
for -(%i71 to n do
begin
read 0a)i&-+3"
a)-&i+(%a)i&-+"
end"
end"
procedure vector"
var .&-(b#te"
begin
assign0f& 1matrice.in23"
reset0f3
.(%*"
4$ile 0not0eoln0f333do
begin
inc0.3"
read 0f&v).+3"
end"
close0f3"
for -(%1 to . do
4rite0v)-+& 1 13"
t(%true"
for -(%1 to .-1 do
if a)v)-+&v)-71++(%* t$en t(%false"
if t(%false t$en
begin
14
for i(%1 to .-1do
for -(%i71 to . do
if v)i+%v)-+ t$en t(%false"
end"
if t(true t$en 4riteln 01lantul e elementar23"
else 4riten 01lantul e neelementar23"
end"
begin
init"
vector"
end.
Problema 10
Sa se genereze toate grafurile neorientate de n varfuri.
Rezolvare :
9rogram graf "
t#pe mat%arra#)1..1**&1..1**+ of *..1"
vec%arra#)1..1**+ of *..1"
var a(mat" st(vec" n(b#te"
function final0p(b#te3(boolean"
begin
if p%n0n-13B' t$en final(%true"
else final(%false"
end"
procedure init"
var i(b#te"
begin
for i(%1 to n do a)i"-+(%*
end"
procedure tipar0p(b#te3"
var i&-(b#te"
begin
for i(%1 to n-1 do
for -(%i-1to n do
begin
a)i&-+(%st)n0i-13Ci0i713B'7-+"
a)-&i+(%a)i&-+"
end"
for i(% to n do
begin
for -(%1 to n do 4rite 0a)i&-+& 1 13"
4riteln"
end"
end"
procedure b.tr0p(b#te3"
var .(b#te"
begin
15
for .(%* to 1 do
begin
st)p+(%."
if final 0p3 t$en tipar0p3
else b.tr0p713
end"
end"
begin
init
b.tr013" readln"
end.
Problema11
Se dau D culori& codificate prin nr. 1& '& E& D. Ffiai toate posibilitile de alctuire
a unor drapele tricolore care s conin numai culori dintre cele date& astfel nct(
culoarea din mi-loc s aparin unui set dat de patru culori din rndul celor D disponibile" a
treia culoare nu poate s fie c unde c este un nr. ntreg cuprins ntre 1 i G" cele trei culori
de pe drapel s fie distincte.
Rezolvare:
program drapele"
const n%D"
t#pe stiva%arra# )1..1*+ of integer"
var st(stiva"
ev&as(boolean"
n&.(integer"
procedure init0.(integer"var st(stiva3"
begin st).+(%*"
end"
procedure succesor0var as(boolean"var st(stiva".(integer3"
begin
if st).+5D t$en
begin st).+(%st).+71"
as(%true"
end
else as(%false"
end"
procedure valid0var ev(boolean"var st(stiva".(integer3"
var i(integer"
begin
ev(%true"
for i(%1 to .-1 do if st)i+%st).+ t$en ev(%false"
if 0st)G+%13 or 0st)G+%G3 or 0st)G+%'3 t$en ev(%false"
if st)G+%01&'&G3 t$en ev(%false"
for i(%1 to H do if st)'+56st)i+ t$en ev(%false"
16
end"
function solutie0.(integer3(boolean"
begin
solutie(%0.%n3"
end"
procedure tipar"
var i(integer"
begin
for i(%1 to n do 4rite 0st)i+3"
4riteln"
end"
begin"
.(%1"init0.&st3"
4$ile .6* do
begin
repeat
succesor 0as&st&.3"
if as t$en valid0ev&st&.3"
until 0not as3 or 0as and ev3"
if as t$en
if solutie0.3 t$en tipar
else
begin
.(%.71"
init0.&st3
end
else .(%.-1"
end"
readln"
end.
Problema12
Se dau n cuburi numerotate 1&'&...&n& de laturi Ii si culori @i& i%1&'&...&n 0fiecare
culoare este codificata printr-un caracter3. Sa se afieze toate turnurile care se pot forma
lund . cuburi din cele n disponibile& astfel nct(
-laturile cuburilor din turn sa fie in ordine cresctoare"
-culorile a oricare doua cuburi alturate din turn sa fie diferite.
Rezolvare:
program cuburi"
t#pe stiva%arra# )1..1**+ of integer"
var st(stiva"
i&n&p&.(integer"
as&ev(boolean"
I(arra# )1..1*+ of integer"
@(arra# )1..1*+ of c$ar"
procedure init0.(integer"var st(stiva3"
17
begin
st).+(%*"
end"
procedure succesor0var as(boolean"var st(stiva".(integer3"
begin
if st).+5n t$en
begin
st).+(%st).+71"
as(%true"
end
else as(%false"
end"
procedure valid0var ev(boolean"st(stiva".(integer3"
var i(integer"
begin
ev(%true"
for i(%1 to .-1 do if I)st).++5%I)st)i++ t$en ev(%false"
if @)st).++%@)st).-1++ t$en ev(%false"
end"
function solutie0.(integer3(boolean"
begin
solutie(%0.%p3"
end"
procedure tipar"
var i(integer"
begin
for i(%1 to p do 4rite0st)i+&2 13"
4riteln"
end"
begin
4rite01n% 13"read0n3"
4rite01p% 13"read0p3"
for i(%1 to n do
begin
4rite01I)1&i&2+%23"readln0I)i+3"
4rite01@)1&i&2+%23"readln0@)i+3"
end"
.(%1"init0.&st3"
4$ile .6* do
begin
repeat
succesor0as&st&.3"
if as t$en valid0ev&st&.3"
until 0not as3 or 0as and ev3"
if as t$en if solutie0.3 t$en tipar
else
18
begin
.(%.71"
init0.&st3"
end
else .(%.-1"
end"
end.
Problema13
Scriei un program care& folosind metoda bac.trac.ing& afieaz toate modurile
de a aran-a elementele unui ir dat de numere ntregi astfel nct in irul rezultat sa nu
existe doua elemente negative alturate.
Rezolvare:
program sir"
t#pe stiva%arra#)1..1**+ of integer"
vector%arra#)1..1**+ of integer"
var st(stiva"
n&.&i(integer"
as&ev(boolean"
a(vector"
procedure init0.(integer"var st(stiva3"
begin
st).+(%*
end"
procedure succesor0var as(boolean"var st(stiva".(integer3"
begin
if st).+5n t$en
begin
st).+(%st).+71"
as(%true"
end
else as(%false"
end"
procedure valid0var ev(boolean"st(stiva".(integer3"
var i(integer"
begin
ev(%true"
for i(%1 to .-1 do if st).+%st)i+ t$en ev(%false"
if 0a)st).++5*3 and 0a)st).-1++5*3 t$en ev(%false"
end"
function solutie0.(integer3(boolean"
begin
solutie(%0.%n3"
end"
procedure tipar"
var i(integer"
begin
19
for i(%1 to n do 4rite0a)st)i++&< <3"
4riteln"
end"
begin
4rite0<n%<3"readln0n3"
for i(%1 to n do
begin
4rite01a)1&i&2+%23"readln0a)i+3"
end"
.(%1"init0.&st3"
4$ile .6* do
begin
repeat
succesor0as&st&.3"
if as t$en valid0ev&st&.3"
until 0not as3 or 0as and ev3"
if as t$en if solutie0.3 t$en tipar
else
begin
.(%.71"
init0.&st3"
end
else .(%.-1"
end"
end.
Problema14
Un comis-voiajor trebuie sa viziteze un numar n de orase. Iniial, acesta se afla
intr-unul dintre ele, notat . !omis-voiajorul dorete sa nu treac de doua ori "rin acelai
ora, iar la ntoarcere sa revin in oraul . !unoscnd legaturile existente intre orase, se
cere sa se ti"reasc toate drumurile "osibile "e care le "oate efectua comis-voiajorul.
Rezolvare:
program comisv"
t#pe stiva%arra#)1..1**+ of integer"
var st(stiva"
i&-&n&.(integer"
as&ev(boolean"
a(arra#)1..'*&1..'*+ of integer"
procedure init0.(integer"var st(stiva3"
begin
st).+(%1"
end"
procedure succesor0var as(boolean"var st(stiva".(integer3"
begin
if st).+5n t$en
begin
st).+(%st).+71"
20
as(%true
end
else as(%false
end"
procedure valid0var ev(boolean"st(stiva".(integer3"
var i(integer"
begin
ev(%true"
if a)st).-1+&st).++%* t$en ev(%false
else
for i(%1 to .-1 do if st)i+%st).+ t$en ev(%false"
if 0.%n3 and 0a)1&st).++%*3 t$en ev(%false
end"
function solutie0.(integer3(boolean"
begin
solutie(%0.%n3
end"
procedure tipar"
var i(integer"
begin
for i(%1 to n do
4rite01nodul%2&st)i+3"
end"
begin
4rite01nr. de noduri%23"readln0n3"
for i(% 1 to n do
for -(%1 to i-1 do
begin
4rite01a)1&i&2&2&-&2+%23" readln0a)i&-+3"
a)-&i+(%a)-&i+"
end"
st)1+(%1" .(%'"
init0.&st3"
4$ile .6* do
begin
repeat
succesor0as&st&.3"
if as t$en valid0ev&st&.3"
until 0not as3 or 0as and ev3"
if as t$en if solutie0.3 t$en tipar
else
begin
.(%.71"
init0.&st3"
end
else .(%.-1"
21
end"
end.
Problema15
Sa se afieze nodurile izolate dintr-un graf neorientat
Rezolvare:
9rogram noduri izolate"
t#pe matrice%arra#)1..,*&1..,*+of b#te
var a (matrice"
n& i& -(integer"
v1& v'%arra#)1..,*+ of b#te"
procedure citire
var /&#(integer"
begin
readln0m&n3
for i(%1to n do
begin
v1)i+(%*& v')i+(%*
end"
for -(%1 to n do
begin
repeat read 0/&#3 until 0/6%13and0/5%n3and0#6%13and0#5%n3and0/56#3
v1)/+%v1)/+71"
v')#+%v')#+71"
end"
for i(%1 to n do
if 0v1)i+%v')i+3and0v1)i+%*3
t$en 4riteln0-3"
end.
Problema16
Se citeste de la tastatura matricea de adiacenta asociata unui graf neorientat cu n
noduri. Sa se scrie arcele grafurilor in fisierul arce.t/t
Rezolvare:
9rogram arce"
var a(arra#)1..,*&1..,*+of *..1
f(te/t& n(b#te"
procedure citire"
var i&-(b#te
begin
read0n3
for i(%1to n do a)i&-+(%*
for i(%1to n do -(%1 to n do read 0a)i&-+3
end
procedure rezolvare
var i&-(b#te
begin
assign0f&2arce.t/t23" re4rite0f3"
22
for i(%1 to n do
for -(%1to n do
if a)i&-+(%1
t$en 4ritln0f&i&2 2&-3"
close0f3
end"
begin
citire" rezolvare"
end.
Problema 17
Sa se tipareasca toate lanturile neelementare care trec prin varfurile v1 si v'.
Rezolvare:
9rogram lanturi"
var a(arra#)1..,*&1..,*+of *..1"
st(arra#)1..,*+of b#te"
v1&v'&n(b#te"
procedure init"
var i&-(b#te"
begin
readln0n3"
for i(%1 to n-1do
for -(%i71to n do
begin
rea 0a)i&-+3" a)-&i+(%a)i&-+3"
end"
repeat readln0v1& v'3"
until 0v156v'3and0v15%n3and0v16%13and0v'6%13and0v'5%n3"
end"
procedure tipar0p(b#te3"
var i(b#te"
begin
for i(%1 to p do 4rite0s7i3
end"
function valid0p(b#te3(boolean"
var i(b#te" t(boolean"
begin
t%true"
for i(%1 to p-1 do
if st)p+%st)i+ t$en t(%false"
if a)st)p+&st)p-1++%* t$en t(false"
valid(%t"
end"
function final0p(b#te3(boolean"
var t(boolean" i(b#te"
begin
t(%false
23
for i(%1 to p do if v1%st)i+ t$en
for -(%1 to p do if v'%st)i+ t$en
if p%. t$en t(true"
final(%t
end"
procedure b.tr0p(b#te3"
var l(b#te"
begin
for l(%1 to n do
begin
st)p+(%l"
end"
valid 0p3 t$en
if final 0p3 t$en tipar0p3"
else b.tr0p713"
end"
begin init"
for .(%G to n do b.tr013"
end.
Powered by http://www.referat.ro/
cel mai complet site cu referate
24

S-ar putea să vă placă și