Cod sursa(job #2666467)

Utilizator Dusceac_Bogdan24Dusceac Bogdan Dusceac_Bogdan24 Data 1 noiembrie 2020 22:20:22
Problema Algoritmul Bellman-Ford Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>
#define inf 2e9
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");

vector<pair<int,int> >v[105];
queue<pair<int,int> >q;
int n,p,x,y,cost,d[105],viz[105];

void djk(int nod){
	for(int i=2;i<=n;i++){
		d[i]=inf;
	}
	q.push({0,nod});
	d[nod]=0;
	while(!q.empty()){
		nod=q.front().second;
		//cost=q.front().first;
		q.pop();
		viz[nod]++;
		//d[nod]=cost;
		if(viz[nod]>n){
			fout<<"Ciclu negativ!";
			n=-90;
            return;
		}
		for(auto it:v[nod]){
			if(d[it.second]>d[nod]+it.first){
				d[it.second]=d[nod]+it.first;
				q.push({it.first,it.second});
			}
		}
	}
}

int main() {

	fin>>n>>p;
	while(fin>>x){
		fin>>y>>cost;
		v[x].push_back({cost,y});
	}
	djk(1);
	if(n==-90)return 0;
	for(int i=2;i<=n;i++){
		fout<<d[i]<<' ';
	}
	return 0;

}