12
UTM Catedra Tehnologii Informationale Referat Lucrarea de laborator Nr 4,5 Tema: Algoritmul de căutare a grafului de acoperire şi a drumului minim într- un graf A efectuat: studentul Cacean Alexandru A verificat: lectorul Ceban G.

Mat Discreta 4,5

Embed Size (px)

DESCRIPTION

Algoritmul de căutare a grafului de acoperire şi a drumului minim într-un graf

Citation preview

UTM

Catedra Tehnologii Informationale Referat

Lucrarea de laborator Nr 4,5

Tema: Algoritmul de cutare a grafului de acoperire i

a drumului minim ntr-un graf A efectuat: studentul Cacean Alexandru

A verificat: lectorul Ceban G.

Chiinu 2004

Scopul lucrrii:

- Studierea algoritmilor de determinare a grafului de acoperire i elaborarea programei ce va realiza acest algoritm.

-studierea algoritmilor de determinare a drumurilor minime ntr-un graf.

- Elaborarea programei de determinare a drumului minim ntr-un graf ponderat.

Enunul problemei:

1. S se elaboreze procedura introducerii unui graf ponderat;

2. S se elaboreze procedura determinrii drumului minim.

3. S se elaboreze programul procedurii de determinare a grafului de acoperire cu posibiliti de pornire a procedurii din oricare vrf al grafului

Textul programului :

Algoritmul de Cutare a grafului de acoperire:

#include

#include

#define MAX_ARCURI 50

#define MAX_VARFURI 20

struct Elem {

int N;

struct Elem * P;

};

typedef Elem* ElemPtr;

typedef int MAdiacenta[MAX_VARFURI] [MAX_VARFURI];

typedef int MIncidenta[MAX_ARCURI] [MAX_VARFURI];

int cd[MAX_VARFURI];

int i;

int all; // variabila va contine numarul de noduri din graf

ElemPtr Pt; // pointer, va fi folosit pentru a accesa elementele listei de adiacenta

MAdiacenta MA;

MIncidenta MI;

ElemPtr T[MAX_VARFURI]; // declararea listei de adiacenta

// initializarea listei de adiacenta

void InitListAdiacenta(void)

// functia data este folosita pentru initializarea listei

{

int i;

for (i=0; iN !=0)

{

Pt=T[i];

T[i]=Pt->P;

delete Pt;

}

}

// Introducerea Listei de adiacenta

void InLA(void)

{

int i, top;

printf("Introducerea listei de adiacenta :\n");

printf("Numarul de varfuri :");

scanf("%d",&all); // all = numarul de varfuri

for (i=0; iN =0; // setarea valorii nodului ca 0

printf("varful %d :",i+1);

while (1) // ciclu infinit pana la un break

{

scanf("%d",&top);

// citirea cate un element pana la intalnirea 0;

if (top != 0)

{

Pt->N = top; // adaugarea elementului la lista

Pt->P = new Elem; // alocarea memoriei pentru un nou element

Pt = Pt->P; //avansarea in lista

Pt->N =0; // setarea valorii ca 0

}

else break; // in caz cand intalnim 0 introducerea valorilor pentru

// varful curent ,i ia sfarsit

}

printf("\n");

}

printf("\n");

}

// Introducerea Matricei de adiacenta

void InMA(void)

{

int i, i1;

printf(" Introducerea Matricei de Adiacenta \n");

printf(" Numarul de varfuri : ");

scanf("%d",&all); // numarul de varfuri

for(i=0; iN=0; //settarea sfarsitului

}

}

}

}

// introducerea matricei de incidenta

void InMI(void)

{

int AllLink;

int i,i1; // variabile contor

int Sr,Tg;

printf("Introducerea matricei de incidenta \n");

printf("Numarul de arcuri : ");

scanf("%d",&AllLink); // citirea numarului de arcuri

printf("\nNumarul de varfuri : ");

scanf("%d",&all); //citirea numarului de varfuri

for (i=0;iN=Tg; //adaugarea nodului

Pt->P = new Elem; //alocarea memoriei

Pt->P->N=0; //setarea sfarsitului listei de noduri

label1:

;

}

}

}

char t[MAX_VARFURI];

void initT(void)

{

for (int i=0;iP; //avansarea in lista

}

}

}

MAdiacenta b;

void parcinadinc(int k) // parcurgerea in adancime

{ int i;

t[k]=1;

for (i=0;i