Cod sursa(job #2924406)

Utilizator viflaem2Granat Andrei Ionut viflaem2 Data 1 octombrie 2022 18:59:37
Problema Algoritmul Bellman-Ford Scor 25
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.06 kb
#include <fstream>

using namespace std;
int mat[1001][1001][3];
int costmin[1001],coada[1001];
int main()
{
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
int n,i,m,st=0,dr=1,obs=0;
f>>n>>m;
for(i=1;i<=n;i++)
                costmin[i]=999999999;
int x,y,c;
while(f>>x>>y>>c)
                {
                mat[x][y][0]=1;
                mat[x][y][1]=c;
                }
costmin[1]=0;
coada[0]=1;
while(st<dr)
           {
           int a=coada[st];
           for(i=1;i<=n;i++)
                           if(mat[a][i][0]==1&&mat[a][i][1]+costmin[a]<costmin[i])
                                                                                 {
                                                                                 costmin[i]=mat[a][i][1]+costmin[a];
                                                                                 mat[a][i][2]++;
                                                                                 if(mat[a][i][2]==n)
                                                                                                   {
                                                                                                   obs=1;
                                                                                                   i=n+1;
                                                                                                   st=dr;
                                                                                                   }
                                                                                 coada[dr]=i;
                                                                                 dr++;
                                                                                 }
           st++;
           }
if(obs==0)
          for(i=2;i<=n;i++)
                {
                if(costmin[i]!=999999999)
                                     g<<costmin[i]<<" ";
                else
                    g<<"-1 ";
                }
else
    g<<"Ciclu negativ!";
return 0;
}