Pagini recente » Cod sursa (job #2784060) | Cod sursa (job #1343123) | Cod sursa (job #2983251) | Cod sursa (job #2837884) | Cod sursa (job #2424155)
#include <iostream>
#include <fstream>
using namespace std;
struct graf
{
int c1,c2,dist;
}Noduri[50001];
int distanta[500001], tata[500001];
int N,M;
int cont=0;
ifstream fin("date.in");
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++;
cout<<"Ciclu negativ!";
}
}
if(cont==0) ///Afisam Distantele
{
for(int i=2;i<=N;i++)
{
cout<<distanta[i]<<" ";
}
}
return 0;
}