Cod sursa(job #2863702)

Utilizator Apyr_GeoSecure George Apyr_Geo Data 7 martie 2022 09:01:19
Problema Algoritmul Bellman-Ford Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <queue>
#define infinity 1000000000
using namespace std;
ifstream cin("bellmanford.in");
ofstream cout("bellmanford.out");
int a[1001][1001],n,m,x,y,c,nd[1001];
queue<int> q;
bool ok=1;
void Ford(int nod)
{
    q.push(1);
    for(int i=1;i<=n;i++)
    {
        if(a[1][i]!=0&&a[1][i]!=infinity)
        {
            q.push(i);
            nd[i]=a[1][i];
        }
    }
    q.pop();
    while(!q.empty())
    {

        int nod_curent=q.front();
        q.pop();
        for(int i=1;i<=n;i++)
        {
            if(a[nod_curent][i]!=0&&a[nod_curent][i]!=infinity)
            {
                if(a[nod_curent][i]+nd[nod_curent]<nd[i])
                {
                    q.push(i);
                    nd[i]=a[nod_curent][i]+nd[nod_curent];
                }
            }
        }
    }
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
            a[i][j]=infinity;
    }
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y>>c;
        a[x][y]=c;
    }
    for(int i=2;i<=n;i++)
        nd[i]=infinity;
    Ford(1);
    for(int i=2;i<=n;i++)
        cout<<nd[i]<<" ";
}