Sunteți pe pagina 1din 3

Drumul de cost minim

//Fiind dat un graf orientat prin matricea sa de adiacenta, sa se calculeze drumul de


cost minim dintre //oricare doua noduri, citite de la tastatura

#include <stdio.h>
#include <stdlib.h>
#include <fstream.h>
#include <iostream.h>
using namespace std;
int i,j,k,v,cost[30][30],INF=(int)1e9; //se declara valorile de tip integer
int main() //functia principala
{
ifstream f("ade.in"); //fisierul din care se citesc valorile
f>>v ; //se citeste din fisier numarul de noduri
for(i=1;i<=v;i++)
for(j=1;j<=v;j++)
{
f>>cost[i][j]; //se citeste din fisier daca exista un arc intre nodul
i si j
//daca exista arc se citeste costul arcului, daca nu exista arc se
citeste 0
if(cost[i][j] == 0 && i!=j)
cost[i][j]=INF; //daca intre nodul i si j nu exista arc,
valoarea cost[i][j]
//primeste o valoare mai mare
decat maxim
}

for(k=1;k<=v;k++) //nodurile k reprezinta noduri intermediare intre i si j


for(i=1;i<=v;i++) //sunt parcurse nodurile de la care incepe drumul
for(j=1;j<=v;j++) //sunt parcurse nodurile de final, la care
ajunge drumul
cost[i][j] = min(cost[i][j], (cost[i][k]+cost[k][j]));
//se cauta un drum de cost minim folosind noduri auxiliare
cout<<"Introduceti nodurile: ";
while(cin>>i && cout<<" si " && cin>>j && i<=v && j<=v)
//cat timp se citesc de la tastatura doua noduri, care sa fie mai mici decat
v(numarul de noduri)
//se afiseaza drumul de cost minim dintre acestea
{
cout<<"Drumul de cost minim dintre "<<i<<" si "<<j;
if(cost[i][j]==INF)cout<<" nu exista"; //in cazul in care drumul de cost minim
dintre cele doua noduri a ramas cu valoarea INF,
//inseamna ca nu
exista niciun drum de la nodul i la nodul j.
else cout<<" este "<<cost[i][j]<<endl; //se afiseaza valoarea costului minim
dintre nodurile i si j
}
return 0;
}
//Fisierul ade.in din care se citesc valorile

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