Cod sursa(job #678666)

Utilizator lucian666Vasilut Lucian lucian666 Data 12 februarie 2012 10:55:16
Problema Algoritmul Bellman-Ford Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<fstream>
#define INF 99999999
using namespace std;
ofstream out("bellmanford.out");
int a[1500][1500],d[1500],T[1500],n,m;
void read();
int ford(int start);
void drum(int x);
int main()
{
	read();
	ford(1);
	
	return 0;
}
void read()
{
	ifstream in("bellmanford.in");
	in>>n>>m;
	int x,y,c;
	for(;m;m--)
	{
		in>>x>>y>>c;
		a[x][y]=c;
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(a[i][j]==0&&i!=j)
				a[i][j]=INF;
}
int ford(int start)
{
	int ok,i,j,k;
	for(i=1;i<=n;i++)
	{
		d[i]=INF;
		T[i]=-1;
	}
	d[start]=0;
		for(i=1;i<=n;i++)
		{
			ok=0;
				for(j=1;j<=n;j++)
					for(k=1;k<=n;k++)
						if(d[j]!=INF&&a[j][k]!=INF)
							if(d[k]>d[j]+a[j][k])
							{
								d[k]=d[j]+a[j][k];
								T[k]=j;
								ok=1;
							}
		}
		if(ok)
			out<<"Ciclu negativ!";
		else
		{
			for(int i=2;i<=n;i++)
				out<<d[i]<<" ";
		
		}
		return 0;
}