Mai intai trebuie sa te autentifici.
Cod sursa(job #2759386)
Utilizator | Data | 17 iunie 2021 15:29:20 | |
---|---|---|---|
Problema | Algoritmul Bellman-Ford | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.26 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
#define inf 1000
int start, a[20][20], n, viz[20], d[20], t[20];
void citire()
{
fin>>n;
int x,y,c;
while (fin>>x>>y>>c)
a[x][y] = c;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (i != j && a[i][j] == 0)
a[i][j] = inf;
fin>>start;
}
void init()
{
viz[start] = 1;
for (int i=1;i<=n;i++)
{
d[i] = a[start][i];
t[i] = start;
}
t[start] = 0;
}
int BellmanFord()
{
for (int k=1;k<=n;k++)
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (a[i][j] != inf)
{
d[j] > d[i] + a[i][j];
d[j] = d[i] + a[i][j];
t[j] = i;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (a[i][j] != inf && d[j] > d[i] + a[i][j])
return 0;
return 1;
}
int main()
{
citire();
init();
if (BellmanFord() == 0)
fout<<"Ciclu negativ";
else
for (int j=2;j<=n;j++)
fout<<d[j]<<' ';
return 0;
}