Cod sursa(job #2863716)

Utilizator Apyr_GeoSecure George Apyr_Geo Data 7 martie 2022 09:22:27
Problema Algoritmul Bellman-Ford Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <queue>
#define infinity 1000000000
using namespace std;
ifstream cin("bellmanford.in");
ofstream cout("bellmanford.out");

long long a[10000][10000];
int n,m,x,y,c,nd[50001];
bool e_in_q[10000];
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();
        e_in_q[nod_curent]=0;
        q.pop();
        for(int i=1;i<=n;i++)
        {
            if(a[nod_curent][i]!=0&&a[nod_curent][i]!=infinity&&e_in_q[nod_curent]==0)
            {
                if(a[nod_curent][i]+nd[nod_curent]<nd[i])
                {

                    q.push(i);
                    e_in_q[i]=1;
                    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]<<" ";
}