Cod sursa(job #669402)

Utilizator lucian666Vasilut Lucian lucian666 Data 26 ianuarie 2012 21:39:15
Problema Ubuntzei Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<fstream>
#define INF 9999999
using namespace std;
ofstream out("ubuntzei.out");
int a[2001][2001],T[2001],d[2001],n,m,k,drum[2001],oras[2001];
void read();
void drumm(int x);
int bellam(int start);
int main()
{
	read();
	bellam(1);
	drumm(n);
	return 0;
}
void read()
{
	ifstream in("ubuntzei.in");
	in>>n>>m;
	in>>k;
	for(int i=1;i<=k;i++)
		in>>oras[i];
	int x,y,c;
	for(;m;m--)
	{
		in>>x>>y>>c;
		a[x][y]=a[y][x]=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;
}
void drumm(int x)
{
	int mm;
	mm=0;
	while(T[x])
	{
		drum[++mm]=x;
		x=T[x];
	}
	drum[++mm]=x;
	out<<mm;
	out<<'\n';
}
int bellam(int start)
{
	int i,j,k,ok;
	for(int i=1;i<=n;i++)
	{
		d[i]=INF;
		T[i]=-1;
	}
	d[start]=0;
	for(i=1;i<=n;i++)
	{
			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;
						}
	}
}