Documente Academic
Documente Profesional
Documente Cultură
PROFESOR COORDONATOR:
GIORGESCU EMILIA MIHAELA
ABSOLVENT:
LUPUI IUSTIN MARIAN
CLASA A XII-C
MOTRU-2023
“COLEGIUL NAŢIONAL GEORGE COŞBUC”
PROFESOR COORDONATOR:
GIORGESCU EMILIA MIHAELA
ABSOLVENT:
LUPUI IUSTIN MARIAN
CLASA A XII-C
MOTRU-2023
CUPRINS
Ø 1.INTRODUCERE..................................................................pag.4
Ø 2.GRAFURI.............................................................................pag.6
Ø 3.PROGRAME........................................................................pag.23
Ø 4.BIBLIOGRAFIE..................................................................pag.39
INTRODUCERE
Informatica este știința procesării sistematice a informației în special a
procesării cu ajutorul calculatoarelor. Istoric, informatica s-a dezvoltat ca știința
din matematică, în timp ce dezvoltarea primelor calulatoare îsi are originea în
electrotehnica și telecomunicații. De aceea, calculatorul reprezintă doar
dispozitivul pe care sunt implementate conceptele teoretice. Informaticianul
olandez Edsger Dijkstra afirma: 'În Informatica ai de-a face cu calculatorul, cum
ai în astronomie cu telescopul'.
Termenul de 'informatică' provine din alaturarea cuvintelor 'informație' și
'matematică'. Alte surse susțin că provine din combinația informație și
automatică.
Istoria științei calculatoarelor precede momentul apariției computerului
digital.Înainte de anul 1920, termenul de 'computer' se referea ,În limba
engleză,la un o persoană care efectua calcule (un funcționar). Primii cercetători
în ceea ce avea să se numească știința calculatoarelor, cum sunt Kurt Gdel,
Alonzo Church si Alan Turing, au fost interesați de problema computațională:
ce informații ar putea un funcționar uman să calculeze având hartie și creion,
prin urmărirea pur și simplu a unei liste de instrucțiuni, atât timp cât este
necesar, fără să fie nevoie ca el să fie inteligent sau să presupună capacitați
intuitive. Una din motivațiile acestui proiect a fost dorința de a proiecta și
realiza 'mașini computaționale' care să automatizeze munca, deseori plictisitoare
și nu lipsită de erori, a unui computer uman.
În perioada anilor 1940, când mașinile computaționale au cunoscut o evoluție
accelerată, termenul de 'computer' și-a modificat semnificația, referindu-se de
acum mai degrabă la mașini, decât la predecesorii săi umani.
Informatica se divide în următoarele domenii fundamentale:
-informatica teoretică
-informatica practică
-informatica tehnică
Pe lânga cele trei domenii mai exista și 'inteligența artificială’ considerată o
interdisciplină de sine stătătoare.
Informatica teoretică se ocupă cu studiul 'teoriei limbajelor formale', respectiv
automatica, 'teoria computaționala și complexității','criptologie', 'logica','teoria
grafurilor' s.a.m.d punând bazele pentru construirea compilatoarelor pentru
limbajele de programare și pentru formalizarea problemelor din matematică. Ea
este, prin urmare, coloana vertebrală a informaticii.
În matematică și informatică, 'teoria grafurilor' studiază proprietațile grafurilor.
Grafuri
Definiție:
Numim graf o pereche ordonată de mulțimi, notată G=(X,U), unde
X este o mulțime finită si nevidă de elemente numite noduri sau vârfuri,
iar U este o mulțime de perechi (ordonate sau neordonate) de elemente
din X numite muchii (dacă sunt perechi neordonate) sau arce (dacă sunt
perechi ordonate). În primul caz, graful se numește neorientat, altfel
acesta este orientat.
Așadar un graf poate fi reprezentat sub forma unei figuri geometrice
alcătuite din puncte (care corespund vârfurilor) și din linii drepte sau curbe care
unesc aceste puncte (care corespund muchiilor sau arcelor).
Fig.2
Cu alte cuvinte, un graf parțial al unui graf se obține păstrând aceeași
mulțime de vârfuri și eliminând o parte din muchii.
Definiție. Un subgraf al unui graf G=(X,U) este un graf H=(Y,V) astfel
încât Y X iar V conține toate muchiile din U care au ambele extremitați în Y.
Vom spune ca subgraful H este indus sau generat de mulțimea de vârfuri Y.
Ex. Mai jos avem un subgraf al grafului din Fig.1 obținut prin eliminarea
nodului 3
Vom nota arcele așa cum se indică în figura , adică u 1=(1,2), u2=(3,1),..,
u11=(6,8).
Gradul exterior al unui vârf x, notat prin d(x), este numărul arcelor de formă
(x,y) cu yIX. Gradul exterior al unui vârf x, notat prin d-(x),este numărul arcelor
de forma (y,x) cu yIX.
Un graf parțial al unui graf orientat G=(X,U) se definește în același mod ca și în
cazul neorientat. El este un graf G1=(X,V) unde V U, deci este graful G însuși
sau se obține din G prin suprimarea anumitor arce.
Și definiția unui subgraf al unui graf orientat G=(X,U) este asemănătoare cu
cazul neorientat.Prin definiție , un subgraf al lui G este un graf H=(Y,V), unde
Y X, iar arcele din V sunt toate arcele din U care au ambele extremitați în
mulțimea de vârfuri Y.
Deci un subgraf H al unui graf orientat G este graful G însuși sau se obține din
G prin suprimarea anumitor vârfuri si a tuturor arcelor incidente cu acestea .
Vom spune ca subgraful H este indus sau generat de mulțimea de vârfuri Y.
Astfel,subgraful grafului G din figura ,indus de mulțimea de vârfuri Y 1 = are ca
mulțime de arce mulțimea V 1 =,iar subgraful indus de mulțimea de vârfuri Y 2 =
are mulțimea arcelor V2=.
Un graf orientat este complet dacă oricare două vârfuri sunt adiacente.
În timp ce in cazul neorientat un graf complet cu n vârfuri este unic determinat,
în cazul orientat există mai multe grafuri complete cu un numar dat de
vârfuri.Ele se deosebesc fie prin orientarea arcelor , fie prin faptul că între două
vârfuri oarecare există un arc sau două arce de sensuri contrare.
Un lanț al unui graf orientat se definește ca un șir de arce:
L=[u1,u2,...,up]
Cu proprietatea că oricare arc uI din acest șir are comună o extremitate cu u i- iar
cealaltă extremitate este comună cu ui+1 pentru orice i=1,,p-1.
Dacă toate arcele lanțului L au aceeași orientare ,care este dată de sensul
deplasării de la x0 către xr lanțul se numește drum.
Deci un drum într-un graf orientat G=(X,U) este un șir de vârfuri notat :
D=(x0,x1,,xr)
cu proprietatea că (x0,x1), (x1,x2), . , (xr-1,xr)IU, deci sunt arce ale grafului.
Vârfurile x0 si xr se numesc extremitațile drumului D. Dacă vârfurile x 0 ,x1 , , xr
sunt distincte două câte două, drumul D se numește elementar. Din aceste
definiții rezultă că orice drum este și lanț , dacă îl privim ca un șir de arce.
Un drum D=(x0, ,xr) poate fi interpretat ca fiind traseul unei deplasări pe arcele
grafului în ordinea (x0,x1), (x1,x2), , (xr-1,xr).
De aceea drumul D de extremitati x0 și xr , se mai spune că este un drum de la x0
la xr .Dacă x0=xr și toate arcele (x0,x1), (x1,x2), ,(xr-1,xr) sunt distincte două câte
două, drumul D se numește circuit.
Daca toate varfurile circuitului, cu exceptia primului si a ultimului varf, sunt
distincte doua cate doua, circuitul se numeste elementar.
Noțiunile de conexitate și de componentă conexă a unui graf orientat sunt
similare cu cele de la grafurile neorientate , utilizând noțiunea de lanț din cazul
grafurilor orientate.
Astfel, un graf orientat G se numește conex dacă pentru oricare două vârfuri
distincte x și y există un lanț de extremități x si y în G. O componentă conexă C
a unui graf orientat G se definește ca fiind un subgraf conex maximal al lui G ,
deci nu existâ nici un lanț care să unească un vârf din C cu un vârf care nu
aparține lui C.
Numim ordinul unui graf, numârul de noduri al grafului, deci cardinalul
mulțimii X(G), și notăm această valoare cu G.
Un graf bipartit este bipartit complet daca fiecare nod din multimea A 1 este
adiacent cu toate nodurile din A2 si reciproc.
-graful complet:
Graf complet
Un graf este complet dacă oricare două vârfuri distince sunt adiacente.
1.Matricea de adiacentă
2. Liste de adiacență
Pentru fiecare nod se memorează o listă a vecinilor săi.
Pentru întregul graf este necesar un vector de liste (P) in care Pi este adresa
primului element al listei asociate lui i.
De exemplu, pentru i = 1, informația din lista figurată mai sus se va completa
astfel: p[1] - 2 - 3 - 5.
4. Matricea noduri-arce
int n,m,A[101]
[101],X[101];
void afisare(int k)
{
fout<<"Varfurile
subgrafului: ";
for(int i=1;i<=k;i++)
fout<<X[i]<<" ";
fout<<endl;
fout<<"Matricea de
adiacenta:\n";
int P[101]={0};
for(int i=1;i<=k;i++)
P[X[i]]=1;
for(int i=1;i<=n;i++)
{
for(int
j=1;j<=n;j++)
if(P[i] &&
P[j]) fout<<A[i][j]<<" ";
else fout<<"0
";
fout<<endl;
}
}
void back(int k)
{
for(int i=X[k-
1]+1;i<=n;i++)
{
X[k]=i;
afisare(k);
back(k+1);
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
fin>>x>>y;
A[x][y]=A[y]
[x]=1;
}
back(1);
return 0;
}
#include <fstream>
using namespace std;
ifstream fin1("graf1.in");
ifstream fin2("graf2.in");
ofstream fout("graf.out");
int n,m1,m2,A[101]
[101],B[101][101],x,y;
int main()
{
fin1>>n>>m1;
for(int i=1;i<=m1;i++)
{
fin1>>x>>y;
A[x][y]=A[y][x]=1;
}
fin2>>n>>m2;
for(int i=1;i<=m2;i++)
{
fin2>>x>>y;
B[x][y]=B[y][x]=1;
}
if(m1>m2)
if(graf_partial(n,A,B))
fout<<"G2 este graf partial al
lui G1";
else fout<<"NU";
else
if(graf_partial(n,B,A))
fout<<"G1 este graf partial al
lui G2";
else fout<<"NU";
return 0;
}
#include <fstream>
using namespace
std;
ifstream
fin("graf.in");
ofstream
fout("graf.out");
void afisare(int k)
{
nrsol++;
fout<<"Graful
partial numarul
"<<nrsol<<":\n";
for(int
i=1;i<=k;i++)
fout<<M[X[i]
].i<<"
"<<M[X[i]].j<<"\
n";
int A[101]
[101]={0};
for(int
i=1;i<=k;i++)
A[M[X[i]].i]
[M[X[i]].j]=A[M[
X[i]].j]
[M[X[i]].i]=1;
for(int
i=1;i<=n;i++)
{
for(int
j=1;j<=n;j++)
fout<<A[i]
[j]<<" ";
fout<<"\n";
}
}
void back(int k)
{
for(int i=X[k-
1]+1;i<=m;i++)
{
X[k]=i;
afisare(k);
back(k+1);
}
}
int main()
{
fin>>n>>m;
for(int
i=1;i<=m;i++)
fin>>M[i].i>>
M[i].j;
afisare(0);
back(1);
return 0;
}
int n,X[21],P[21],l;
void afisare()
{
for(int i=1;i<=l;i++)
fout<<X[i]<<" ";
fout<<X[1]<<endl;
}
void back(int k)
{
for(int i=1;i<=n;i++)
if(!P[i])
{
X[k]=i;
P[i]=1;
if(k==l)
afisare();
else back(k+1);
P[i]=0;
}
}
int main()
{
fin>>n>>l;
back(1);
return 0;
#include <fstream>
using namespace std;
ifstream fin("date.in");
ofstream
fout("date.out");
int n,m,A[100]
[100],P[100],k,G[100];
void citire()
{
int x,y;
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y;
A[x][y]=A[y]
[x]=1;
}
}
int grad(int
k)//calculeaza gradul
varfului k
{
int s=0;
for(int i=1;i<=n;i++)
if(A[k][i]==1) s++;
return s;
}
int conex()//conexitatea
grafului
{
DF(1);
for(int i=1;i<=n;i++)
if(P[i]==0) return
0;
return 1;
}
void ciclu_eulerian(int
k)//construieste un ciclu
eulerian
{
int maxx=0,nmax=0;
fout<<k<<" "; //afiseaza
varful curent
for(int i=1;i<=n;i+
+)//cauta varful urmator
cu grad maxim
{
if(A[k][i]==1)
if(G[i]>maxx)
{
maxx=grad(i);
nmax=i;
}
}
if(nmax!=0)
{ A[k]
[nmax]=A[nmax]
[k]=0;//sterge mughia
G[k]--;//scade
gradele
G[nmax]--;
ciclu_eulerian(n
max);//merge in varful
urmator
}
}
int main()
{
citire();
for(int i=1;i<=n;i++)
G[i]=grad(i);
if(euler())
{
fout<<"este
eulerian\n";
ciclu_eulerian(1);
}
else fout<<"nu este
eulerian\n";
fin.close();
fout.close();
return 0;
}
st=dr=1;
p[s]=1;
x[1]=s;
while(st<=dr)
{
for(i=1; i<=n; i++)
if(A[x[st]]
[i]==1)
if(!p[i])
{
dr++;
x[dr]=i;
p[i]=1;
A[i]
[x[st]]=0;
}
else
{
fout<<"["<<
x[st]<<","<<i<<"]"<<en
dl;
A[x[st]]
[i]=A[i][x[st]]=0;
}
st++;
}
}
int main()
{
int x,y,i,j;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y;
A[x][y]=A[y]
[x]=1;
}
sterg(1);
for(i=1;i<=n;i++)
for(j=1;j<i;j++)
A[i][j]=A[j][i];
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
fout<<A[i][j];
fout<<endl;
}
fin.close();
fout.close();
return 0;
}
BIBLIOGRAFIE
1. Thomas H. Cormen, Charles E. Leiserson, Ronald L., Introducere in
Algoritmi – Capitolul 23 Algoritmi elementari pe grafuri
2. D.R. Popescu, Combinatorica si teoria grafurilor, SSMR, 2005
3. Tomescu, Combinatorica si teoria grafurilor, Tipografia Univ. Bucuresti,
1978
4. Andone R., Garbacea I., Algoritmi fundamentali o perspectivă C++, Editura
Libris, Cluj- Napoca, 1995
5. Atanasiu A., Concursuri de informatică: Probleme propuse, Editura Petrion,
Bucureşti, 1994
6. Cucoș C., Pedagogie (Editia a II-a, revazută și adaugită), Editura Polirom,
Iaşi, 2006
7. Masalagiu C., Asiminoaei I., Didactica predării informaticii, Editura
Polirom, Iaşi, 2004
8. Mateescu G. D., Moraru P. F., Informatica pentru liceu şi bacalaureat –
materia de clasa a XI-a, Colecţia Donaris, Sibiu, 2001
9. Miloșescu M., Manual pentru clasa a XI-a informatică intensiv, Editura
Didactică și Pedagogică, Bucureşti, 2006
10. Munteanu F., Ionescu T., Muscă Gh., Programarea calculatoarelor, Editura
Didactică şi Pedagogică, Bucureşti, 1992.
11. Odăgescu I., Furtună F., Metode şi tehnici de programare, Editura
Computer Libris Agora, Cluj Napoca, 1998
12. Tomescu I., Bazele informaticii, manual pentru clasa a X, Editura Didactică
şi Pedagogică, Bucureşti, 1994
13. Tomescu, Ioan, Probleme de combinatorica si teoria grafurilor, Editura
Didactica si Pedagogica, Bucuresti, 1981.
14. Paul Van Dooren, , Belgium, Graph Theory and Applications, Université
catholique de Louvain Louvain-la-Neuve
15. Tudor S., Huţanu V., Informatică, manual clasa a XI-a, informatică
intensiv, Editura L&S Soft, Bucureşti, 2006
16. http://www.infoarena.ro
17. https://sites.google.com/site/teoriagrafurilor/
18. http://www.graf.go.ro/files/tipuri.htm
19. http://campion.edu.ro/arhiva/
20. http://en.wikipedia.org/wiki/Graph_theory
21. http://www.ginfo.ro/revista/15_3/focus1.pdf