Sunteți pe pagina 1din 3

MINISTERUL EDUCAȚIEI ȘI CERCETĂRII

AL REPUBLICII MOLDOVA
UNIVERSITATEA TEHNICĂ A MOLDOVEI

INFORMATICĂ ȘI INGINERIA SISTEMELOR

RAPORT
Lucrarea de laborator nr. 1
Tema: Păstrarea grafurilor în memoria calculatorului.
Matricea drumurilor.

A efectuat: Batranac Adriana


st. gr. AI-221

A verificat: V.Melnic

Chişinău, 2023
Lucrare de laborator Nr. 4
Tema: Algoritmi de determinare a drumului minim.
1. Scopul lucrării:
1. Studiereaalgoritmilordedeterminareadrumurilorminimeșimaximeîntr- un
graf;
2. Elaborarea programelor de determinare a drumului minim și maxim într- un
graf ponderat.
2. Sarcina:
1. Elaboraţi procedura introducerii unui graf ponderat.
2. Elaboraţi procedurile determinării drumului minim utilizând algoritmul
Ford.
3. Realizaţi un program cu următoarele funcţii:
➢ Introducerea grafului ponderat cu posibilităţi de analiză sintactică şi
semantică şi de corectare a informaţiei;
➢ Determinarea drumului minim utilizând algoritmul Ford ➢Extragerea
informaţiei la display (valoarea drumului minim şi
succesiunea vârfurilor care formează acest drum);
3. Întrebări de control:
1. Ce se numeşte graf ponderat?
2. Definiţi noţiunea de distanţă.
3. Descrieţi etapele principale ale algoritmului Ford.
4. Care sunt momentele principale în algoritmul Bellman-Kalaba?
5. Prin ce se deosebeşte algoritmul Ford de algoritmul Bellman-Kalaba?
6. Cum se va stabili succesiunea vârfurilor care formează drumul minim

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#define NODES 9

int main()
{
int matricePonderata[NODES][NODES] = { 0,0,2,0,0,0,3,0,0,
0,0,1,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,
4,0,0,0,0,0,0,0,0,
0,0,0,2,0,0,0,3,0,
0,0,0,0,2,0,0,0,4,
0,0,4,0,0,0,0,0,0,
2,3,0,0,0,0,0,0,0,
0,2,0,0,0,0,0,0,0 };

int minPath[2][NODES];
int front = 0, rear = 0, queue[100], visited[NODES],path[NODES],pathIndex = 0, current, start, end;

for (int i = 0; i < NODES; i++)


{
visited[i] = 0;
minPath[0][i] = 50;
minPath[1][i] = -1;
}

printf("Introdu inceputul si sfarsitul drumului (valori < 9):\n");


scanf("%d\t%d", &start, &end);

current = start;

visited[current] = 1;
queue[rear++] = current;
minPath[0][current] = 0;
while (front < rear)
{
current = queue[front++];
for (int i = 0; i < NODES; i++)
{
if (matricePonderata[current][i] != 0 && visited[i] == 0)
{
queue[rear++] = i;
visited[i] = 1;
}
if (minPath[0][i] - minPath[0][current] > matricePonderata[current][i] && matricePonderata[current][i] > 0)
{
minPath[0][i] = minPath[0][current] + matricePonderata[current][i];
minPath[1][i] = current;
}
}
}
if (minPath[0][end] == 50)
{
printf("No path :( ");
return -1;
}
else
{
current = end;
while (current != -1)
{
path[pathIndex++] = current;
current = minPath[1][current];
}
}
printf("Ford Minimal path:\n");
for (int i = pathIndex-1; i >= 0; i--)
{
printf("%d ", path[i]);
}
return 1;
}

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