Cod sursa(job #2359913)

Utilizator Luca19Hritcu Luca Luca19 Data 1 martie 2019 10:35:19
Problema Ubuntzei Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream>
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
bool viz[20];
long long n,m,k,c[15],i,x,y,cst,a[2011][2011],st[20],mn=1e17,ans;
void prelucreaza()
{
    ans=a[1][c[st[1]]]+a[c[st[k]]][n];
    for(int i=1;i<k;i++)
    {
        ans=ans+a[c[st[i]]][c[st[i+1]]];
    }
    mn=min(mn,ans);
}
void perm(int p)
{
    for(int i=1;i<=k;i++)
        if(!viz[i])
    {
        st[p]=i;
        viz[i]=1;
        if(p<k)
        {
            perm(p+1);

        }
        else
            prelucreaza();
        viz[i]=0;
    }
}
void royfloyd()
{
    int i,j,k;
    for(k=1; k<=n; k++)
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
                if (a[i][k] && a[k][j] && (a[i][j] > a[i][k] + a[k][j] || !a[i][j]) && i!=j)
                    a[i][j]=a[i][k]+a[k][j];
}
int main()
{
    f>>n>>m>>k;
    for(i=1;i<=k;i++)
        f>>c[i];
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>cst;
        a[x][y]=a[y][x]=cst;
    }
    royfloyd();
    perm(1);
    g<<mn;
}