Cod sursa(job #672835)

Utilizator noobakafloFlorin eu noobakaflo Data 3 februarie 2012 10:55:14
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<iostream>
#include<fstream>
using namespace std;

#define MAX_N 1000
#define INF 9999999

int n,m,C[MAX_N][MAX_N],Urm[MAX_N][MAX_N],Priet[MAX_N];

void initializare(void)
{
	int i,j;
	for(i=1; i<=n; i++)
		for(j=1; j<=n; j++)
			if(i==j)
				C[i][j]=0;
			else
				C[i][j]=INF;
}
	
void citeste_graf(void)
{
	int i,nr_p,x,y,c;
	fstream f("ubuntzei.in",ios::in);
	f>>n>>m;
	f>>nr_p;
	for(i=1; i<=nr_p; i++)
		f>>Priet[i];
	
	initializare();
	for(i=1; i<=m; i++)
	{
		f>>x>>y>>c;
		C[x][y]=c;
	}
	
	f.close();
}

void roy_floyd(void)
{
	int k,i,j;
	
	
	for(i=1; i<=n; i++)
		for(j=1; j<=n; j++)
			if(C[i][j]!=0 && C[i][j]!=INF) 
				Urm[i][j]=j;  			
			else                                 
				Urm[i][j]=0;                       
			
	for(k=1; k<=n; k++)
		for(i=1; i<=n; i++)
			for(j=1; j<=n; j++)
				if(C[i][j]>C[i][k]+C[k][j])   
				{
					C[i][j]=C[i][k]+C[k][j];
					Urm[i][j]=Urm[i][k];       
				}
}

void calc_drum(int &cnt,int i,int j)
{
	cnt++;
	if(i!=j)
		calc_drum(cnt,Urm[i][j],j);
	else
		return;
}

void afisare_sol(int cnt)
{
	fstream g("ubuntzei.out",ios::out);
	g<<cnt;
	g.close();
}

int main()
{
	int cnt=0;
	
	citeste_graf(); 
	roy_floyd();
	calc_drum(cnt,1,n);
	afisare_sol(cnt);
	
	return 0;
}