Professional Documents
Culture Documents
Raport
Lucrarea de laborator Nr.4
la Matematica Discreta
Chişinău, 2021
Lucrare de laborator Nr.4
Listing-ul programului
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct list {
int v;
int pondere;
struct list* urmator;
};
struct graph {
int h;
int p;
struct list *primul;
struct list *ultimul;
};
while (good)
{
for (int i = 0; i < *virf; i++)
{
arr[i] = MAX;
for (int j = 0; j < *virf; j++)
if (i != j && arr[i] > arr1[j] + M[i][j])
{
arr[i] = arr1[j] + M[i][j];
P[i] = j;
}
}
arr[vert] = 0;
int i;
for (i = 0; i < *virf && arr[i] == arr1[i]; i++);
good = (i == *virf) ? 0 : 1;
t = arr1; arr1 = arr; arr = t;
}
for (int i = 0; i < *virf; i++)
{
printf("\nDrumul min din %d in %d este: ", i + 1, vert + 1);
if (arr1[i] == MAX) printf("\nnu exista");
else
{
for (int k = i, j = 0; j < *virf && P[k] != -1 && k != vert; j++)
{
if (!j) printf(": %d", k + 1);
else
printf("->%d", k + 1);
k = P[k];
}
if (i < *virf - 1) printf("->%d", vert + 1);
else
printf(": %d", vert + 1);
printf(" : Lungimea: %d", arr1[i]);
}
}
for (int i = 0; i < vert; i++)
free(M[i]);
int main()
{
int optiune;
int virf;
Graph *graph = NULL;
while(1)
{
system("cls");
printf(" 1. Introducerea grafului \n");
printf(" 2. Drum minim - Ford \n");
printf(" 3. Drum minim - Belman-Kalaba \n");
printf(" 0. Iesire \n");
printf("\n> ");
scanf("%d", &optiune);
switch(optiune){
case 1:
graph = creaza_un_graf(&virf);
getch();
break;
case 2:
ford(graph, &virf);
getch();
break;
case 3:
bellman_kalaba(graph, &virf);
getch();
break;
case 0:
stergere_graf(graph, &virf);
exit(1);
default:
printf("\nAlegeti optiunea corecta!");
getch();
}
}
return 0;
}
Dati nr. de virfuri a grafului: 8
Introduceti lista de adiacenta:
1| 2 3 5 0
2| 3 4 0
3| 5 7 0
4| 6 0
5| 4 8 0
6| 8 0
7| 8 0
8| 0
Ford
Belman-Kalaba