Pagini recente » Cod sursa (job #3289921) | Cod sursa (job #2106365) | Cod sursa (job #2855504) | Cod sursa (job #217701) | Cod sursa (job #2424158)
#include <iostream>
#include <fstream>
using namespace std;
struct graf
{
int c1,c2,dist;
}Noduri[500005];
int distanta[500005], tata[500005];
int N,M;
int cont=0;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
int main()
{
fin>>N>>M;
for(int i=1;i<=M;i++) ///Citim Graful
{
fin>>Noduri[i].c1>>Noduri[i].c2>>Noduri[i].dist;
}
for(int i=1;i<=N;i++) /// Initializam Graful
{
distanta[i]=999999999; /// Declaram distantele initiale cu infinit
tata[i]=0;
}
distanta[1]=0; ///Distanta de la sursa e 0
for(int i=1;i<=N;i++) /// Relaxam muchiile
{
for(int j=1;j<=M;j++)
{
if(distanta[Noduri[j].c1]+Noduri[j].dist<distanta[Noduri[j].c2])
{
distanta[Noduri[j].c2]=distanta[Noduri[j].c1]+Noduri[j].dist;
tata[Noduri[j].c2]=Noduri[j].c1;
}
}
}
for(int j=1;j<=M;j++) /// Mai facem o verificare pentru toate muchiile pentru detectarea ciclurilor negative
{
if(distanta[Noduri[j].c1]+Noduri[j].dist<distanta[Noduri[j].c2] && cont==0)
{
cont++;
fout<<"Ciclu negativ!";
}
}
if(cont==0) ///Afisam Distantele
{
for(int i=2;i<=N;i++)
{
fout<<distanta[i]<<" ";
}
}
return 0;
}