7/27/2019 Algoritmica Grafurilor.doc
1/30
ALGORITMICA GRAFURILOR
Cuprins
1.LABORATOR 1....................................................................................................................................................................2
1.1.CREAREAUNUIARBOREBINARSIPARCURGEREASAPRINCELE 3 FORME: RSD, SRD,SDR .........................................2
2.LABORATOR 2....................................................................................................................................................................4
2.1.CITIREAUNUIGRAF..........................................................................................................................................................4
2.2.OBTINEREADINTR-UNGRAFAUNUIALTGRAFPRINCONTRACTIE..................................................................................4
3.LABORATOR 3....................................................................................................................................................................6
3.1.AVANDDATUNGRAF,DETERMINATIUNSUBGRAFALSAU..............................................................................................6
3.2.AVANDDATUNGRAF,DETERMINATIUNGRAFPARTIALALSAU.....................................................................................63.3.DETERMINATIVECINIIUNUIVARFALUNUIGRAF............................................................................................................8
3.4. DETERMINATIGRADELEVARFURILORUNUIGRAF,GRADULMINIMSIGRADULMAXIM..................................................8
3.5. DETERMINATIW+(A)-MULTIMEAARCELORINCIDENTECU A CATREEXTERIOR, W- (A)-MULTIMEAARCELOR
INCIDENTECU A CATREINTERIORSIVECINIILUI A, UNDE A ESTEOSUBMULTIMEDEVARFURIALEGRAFULUI...............10
3.6. VERIFICATIDACAUNGRAFESTESIMETRIC/ANTISIMETRIC...........................................................................................11
4.LABORATOR 4..................................................................................................................................................................12
4.1. DETERMINATIDACADOUAGRAFURISUNTIZOMORFE..................................................................................................12
5. LABORATOR 5.................................................................................................................................................................14
5.1. ALGORITMUL ROY-WARSHALL...................................................................................................................................14
5.2.ALGORITMUL ROY-FLOYD.............................................................................................................................................14
5.3.ALGORITMULLUI DIJKSTRA...........................................................................................................................................166.LABORATOR 6..................................................................................................................................................................18
6.1.ALGORITMUL BELLMAN-FORD......................................................................................................................................18
6.2.ALGORITMULLUI PRIM..................................................................................................................................................19
6.3.ALGORITMULLUI KRUSKAL...........................................................................................................................................20
7.LABORATOR 7..................................................................................................................................................................24
7.1.COLORARAREASECVENTIALAAUNUIGRAF..................................................................................................................24
7.2.COLORAREASECVENTIALA(ALGORITMUL LARGERFIRST)............................................................................................25
8.LABORATOR 8..................................................................................................................................................................28
8.1.ALGORITMUL FORD-FULKERSON...................................................................................................................................28
1
7/27/2019 Algoritmica Grafurilor.doc
2/30
1. LABORATOR 1
1.1. Crearea unui arbore binar si parcurgerea sa prin cele 3 forme:
RSD, SRD,SDR
# include # include
# include # include typedef struct arbore
{int inf;struct arbore *st,*dr;
}arbore;arbore *creare(void){arbore *aux;char ch;
printf("\n e nod NULL?[d/n]");ch=getche();ch=toupper(ch);if (ch=='N'){aux=(arbore *)malloc(sizeof(arbore));printf("\n informatia=");scanf("%d",&aux->inf);printf("\n urmeaza succesorul stang al nodului cu informatia
%d",aux->inf);aux->st=creare();printf("\n urmeaza succesorul drept al nodului cu informatia
%d",aux->inf);aux->dr=creare();return aux;
}else return NULL;
}void RSD(arbore *a){if (a!=NULL){printf("%d ",a->inf);
RSD(a->st);RSD(a->dr);}
}void SRD(arbore *a){if(a!=NULL){SRD(a->st);printf("%d ",a->inf);
2
7/27/2019 Algoritmica Grafurilor.doc
3/30
SRD(a->dr);}
}void SDR(arbore *a){if (a!=NULL){SDR(a->st);
SDR(a->dr);printf("%d ",a->inf);
}}void main(void){clrscr();arbore *a;a=creare();printf("\n parcurgerea RSD este ");RSD(a);
printf("\n parcurgerea SRD este ");SRD(a);printf("\n parcurgerea SDR este ");SDR(a);getch();
}
3
7/27/2019 Algoritmica Grafurilor.doc
4/30
2. LABORATOR 2
2.1. Citirea unui graf
# include # include void main(void)
{int n,a[50][50],i,j;FILE *f;f=fopen("graf.in","r");fscanf("f,"%d",&n);for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
5/30
scanf("%d",&x);scanf("%d",&y);if(a[x][y]==0) printf("\n nu se poate face contractarea!");
else{for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
6/30
3. LABORATOR 3
3.1. Avand dat un graf,determinati un subgraf al sau.
# include # include void main(void)
{int n,a[50][50],i,j,m,v[50],k;FILE *f;f=fopen("graf.in","r");fscanf(f,"%d",&n);for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
7/30
# include # include void main(void){int n,a[50][50],i,j,m,v[50],k;FILE *f;char c;f=fopen("graf.in","r");
fscanf(f,"%d",&n);for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
8/30
a[j][i]=0;}}*/
getch();}
3.3. Determinati vecinii unui varf al unui graf.
# include # include void main(void){int n,a[50][50],i,j,x,v[50],k;FILE *f;f=fopen("graf.in","r");fscanf(f,"%d",&n);for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
9/30
int exterior;}semigrad[50];
int minim(int v[50],int n){int i,min=v[1];for(i=2;i
7/27/2019 Algoritmica Grafurilor.doc
10/30
getch();}
3.5. Determinati w+(A)-multimea arcelor incidente cu A catre exterior,
w- (A)-multimea arcelor incidente cu A catre interior si vecinii lui
A, unde A este o submultime de varfuri ale grafului.
# include # include int in(int v[50],int n,int x){for(int i=1;i
7/27/2019 Algoritmica Grafurilor.doc
11/30
if (in(v,k,j)==0){k++;v[k]=j;
}for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
12/30
4. LABORATOR 4
4.1. Determinati daca doua grafuri sunt izomorfe.
# include # include int a[25][25],st[25],n,m,t,b[25][25];void initializare(void){int i,j;FILE *f;f=fopen("graf.txt","r");fscanf(f,"%d",&n);for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
13/30
}int valid(int k){for(int i=1;i
7/27/2019 Algoritmica Grafurilor.doc
14/30
5. LABORATOR 5
5.1. Algoritmul Roy-Warshall.
# include # include int min(int a,int b){return a
7/27/2019 Algoritmica Grafurilor.doc
15/30
# include int min(int a,int b){return a
7/27/2019 Algoritmica Grafurilor.doc
16/30
5.3. Algoritmul lui Dijkstra
#include #include #include #include typedef struct set
{
int inf;struct set *next;
}set;int d[50];int min(set *s){int i,min,t;min=d[s->inf];t=s->inf;for(set *p=s;p!=NULL;p=p->next)
if (d[p->inf]inf];t=p->inf;}
return t;}set *stergere(set *s,int inf){set *p=s,*q;if (s->inf==inf) s=s->next;
else{
while(p->next->inf!=inf && p->next!=NULL) p=p->next;if (p->next!=NULL){q=p->next;p->next=q->next;free(q);}}
return s;}void main(void){int a[25][25],m[50][50],u,i,j,n,x;FILE *f;set *s,*aux,*q;f=fopen("gr.txt","r");fscanf(f,"%d",&n);for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
17/30
printf("\n graful are %d varfuri,matricea de adiacenta fiind:\n",n);for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
18/30
6. LABORATOR 6
6.1. Algoritmul Bellman-Ford
# include # include void main(void){int a[50][50],m[50][50],d[50],i,j,n,s,k;FILE *f;clrscr();f=fopen("gr.txt","r");fscanf(f,"%d",&n);for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
19/30
for(j=1;jd[i]+m[i][j])
d[j]=d[i]+m[i][j];}
printf("vectorul d este:");for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
20/30
FILE *f;clrscr();f=fopen("graf.in","r");fscanf(f,"%d",&n);for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
21/30
# include # include typedef struct min
{int lin,col;}min;
int n,a[50][50],m[50][50],t[50][50],k,ok,v[50],st[50];void initializare(void)
{for(int i=1;i1 && t[st[k]][st[k-1]]==0) return 0;for(int i=2;i
7/27/2019 Algoritmica Grafurilor.doc
22/30
}void main(void){int i,j,k,x,y;FILE *f;clrscr();f=fopen("graf.in","r");fscanf(f,"%d",&n);
for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
23/30
m[x][y]=1000;m[y][x]=1000;
}printf("arborele de cost minim este:\n");afisare(t,n);getch();
}
23
7/27/2019 Algoritmica Grafurilor.doc
24/30
7. Laborator 7
7.1. Colorararea secventiala a unui graf
# include # include # include void stergere(int v[50],int n,int x){int i,j;for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
25/30
afisare(a,n);printf("introduceti ordinea de colorare a varfurilor:");for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
26/30
}}void afisare(int a[50][50],int n){int i,j;printf("\n");for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
27/30
t=d[i];d[i]=d[j];d[j]=t;
}for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
28/30
8. LABORATOR 8
8.1. Algoritmul Ford-Fulkerson
# include # include # include struct retea
{int arc,capacitate,flux;
}a[50][50];int r[50][50],st[50],n,k,min,intrare,iesire,flux,t;void initializare(void){for(int i=1;i1 && r[st[p-1]][st[p]]==0) return 0;for(int i=1;i
7/27/2019 Algoritmica Grafurilor.doc
29/30
{st[p]=i;if (valid(p)==1)if (p>=3 && st[p]==iesire) {k=1;tipar(p);}else bktr(p+1);
}}void main(void)
{int i,j,ok,ok1;FILE *f;clrscr();f=fopen("graf.txt","r");fscanf(f,"%d",&n);for(i=1;i
7/27/2019 Algoritmica Grafurilor.doc
30/30
}if (ok==0) intrare=i;if (ok1==0) iesire=i;
}do{k=0;t=0;initializare();
st[1]=intrare;bktr(2);}while(k==1);flux=0;for(i=1;i