Cod sursa(job #1858018)

Utilizator petardaaaaaAvasiloaie Sebastian petardaaaaa Data 26 ianuarie 2017 22:28:27
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <fstream>
#define infinit 1000000000

using namespace std;
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");
int d[2001],v[2001],a[2000][2000],n,m,k,x,y,z,vk[15];

void citire()
{
    int i;
    fin>>n>>m>>k;
    for(i=1;i<=k;i++)
        fin>>vk[i];
    while(fin>>x>>y>>z)
        a[x][y]=a[y][x]=z;
}

void creare_mat()
{
    int i,j;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(i==j)
                a[i][j]=0;
            else
                a[i][j]=infinit;
}

void roy()
{
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(a[i][j]>a[i][k]+a[k][j])
                    a[i][j]=a[i][k]+a[k][j];
}

void dijk()
{
    int i;
    for(i =1 ; i <= n ; i ++ )
	{
		v[i] = 0;
		d[i] = a[1][i];
	}
	v[1] = 1, d[1] = 0;
	d[0] = infinit;
	for(int j = 1 ; j < n ; ++j)
	{
		int pmax = 0;
		for(i = 1 ; i <= n ; ++i)
			if(v[i] == 0 && d[i] < d[pmax])
				pmax = i;
		if(pmax > -1)
		{
			v[pmax] = 1;
			for(i = 1; i <= n ; ++i)
				if(v[i] == 0 && d[i] > d[pmax] + a[pmax][i])
        d[i] = d[pmax] + a[pmax][i];
		}
	}
}

int main()
{
    creare_mat();
    citire();
    if(k==0)
    {
        dijk();
        fout<<a[1][n];
    }
    else
    {
        roy();
    }
}