Upload
dorin-graur
View
7
Download
3
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