Algoritmica Grafurilor.doc

Embed Size (px)

Citation preview

  • 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