Sunteți pe pagina 1din 8

Universitatea Tehnică a Moldovei

Facultatea Calculatoare Informatică și Microelectronică


Departamentul Ingineria Software și Automatică

RAPORT
la lucrarea de laborator nr. 1

la MD

Tema: Păstrarea grafurilor în memoria calculatorului. Parcurgerea în adîncime

A efectuat: st.grupa Dombrovschi Iulia , TI-224

A verificat: Melnic Vladimir

Chişinău 2023
Scopul lucrării

1. Studierea metodelor de definire a unui graf: matrice de incidenţă, matrice de adiacenţă, liste;

2. Elaborarea unor proceduri de introducere, extragere şi transformare a diferitor forme de


reprezentare internă a grafurilor cu scoaterea rezultatelor la display şi imprimantă.

3. Elaborarea programelor de parcurgerea în adîncime într-un graf neorientat.

2. Sarcina:
1. Elaboraţi procedura introducerii unui graf în memoria calculatorului în formă de:

• matrice de incidenţă (graf orientat, neorientat)

• matrice de adiacenţă (graf neorientat).

2. Folosind procedurile menţionate elaboraţi programul care va permite:

• introducerea grafului reprezentat sub oricare din cele trei forme cu posibilităţi de corecţie a datelor;

• extragerea informaţiei la display.

3. Elaborați procedurile de parcurgere în adîncime într-un graf neorientat.

4. Realizaţi un program cu următoarele funcţii:

• introducerea grafului ca matrice de adiacență (graf neorientat) cu posibilităţi de analiză sintactică şi


semantică şi de corectare a informaţiei;

• parcurgerea în adîncime a grafului;

• extragerea informaţiei la display;


#include <stdio.h>

#include <stdlib.h>

#define MAX_VERTICES 100

#define MAX_EDGES 500

// Structura pentru stocarea informațiilor despre un nod

typedef struct {

int x, y;

} Edge;

// Structura pentru stocarea informațiilor despre un graf

typedef struct {

int numVertices, numEdges;

Edge edges[MAX_EDGES];

} Graph;

// Funcție pentru introducerea datelor despre graf

void inputGraph(Graph *G) {

printf("Introduceti numărul de noduri si numărul de muchii: ");

scanf("%d%d", &G->numVertices, &G->numEdges);

printf("Introduceti muchiile grafului (x y):\n");

for (int i = 0; i < G->numEdges; i++) {

scanf("%d%d", &G->edges[i].x, &G->edges[i].y);

// Funcție pentru afișarea grafului în forma de listă de adiacență


void displayList(Graph G) {

printf("Lista de adiacenta a grafului:\n");

for (int i = 1; i <= G.numVertices; i++) {

printf("%d: ", i);

for (int j = 0; j < G.numEdges; j++) {

if (G.edges[j].x == i) {

printf("%d ", G.edges[j].y);

printf("\n");

// Funcție pentru afișarea grafului în forma de matrice de adiacență

void displayMatrix(Graph G) {

int adjMatrix[MAX_VERTICES][MAX_VERTICES];

// Inițializarea matricii cu 0

for (int i = 1; i <= G.numVertices; i++) {

for (int j = 1; j <= G.numVertices; j++) {

adjMatrix[i][j] = 0;

// Popularea matricii cu valori

for (int i = 0; i < G.numEdges; i++) {

int x = G.edges[i].x;

int y = G.edges[i].y;

adjMatrix[x][y] = 1;
}

printf("Matricea de adiacenta a grafului:\n");

for (int i = 1; i <= G.numVertices; i++) {

for (int j = 1; j <= G.numVertices; j++) {

printf("%d ", adjMatrix[i][j]);

printf("\n");

// Funcție pentru afișarea grafului în forma de matrice de incidență

void displayIncidenceMatrix(Graph G) {

int incMatrix[MAX_VERTICES][MAX_EDGES];

// Inițializarea matricii cu 0

for (int i = 1; i <= G.numVertices; i++) {

for (int j = 0; j < G.numEdges; j++) {

incMatrix[i][j] = 0;

// Popularea matricii cu valori

for (int i = 0; i < G.numEdges; i++) {

int x = G.edges[i].x;

int y = G.edges[i].y;

incMatrix[x][i] = 1;

incMatrix[y][i] = -1;

}
printf("Matricea de incidenta a grafului:\n");

for (int i = 1; i <= G.numVertices; i++) {

for (int j = 0; j < G.numEdges; j++) {

printf("%d ", incMatrix[i][j]);

printf("\n");

int main() {

Graph G;

// Introducerea datelor

inputGraph(&G);

// Afișarea datelor

int choice;

printf("Alegeti forma in care doriti sa fisati graful:\n");

printf("1. Lista de adiacenta\n");

printf("2. Matricea de adiacenta\n");

printf("3. Matricea de incidenta\n");

printf("Introduceti optiunea: ");

scanf("%d", &choice);

switch (choice) {

case 1:

displayList(G);

break;

case 2:

displayMatrix(G);
break;

case 3:

displayIncidenceMatrix(G);

break;

default:

printf("Optiunea introdusă nu este valida.\n");

return 0;

S-ar putea să vă placă și