Cod sursa(job #1643350)

Utilizator Julian.FMI Caluian Iulian Julian. Data 9 martie 2016 18:36:29
Problema Ubuntzei Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <fstream>
#define inf 999999999
#define nmax 210

using namespace std;
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");
long c[nmax][nmax];
int n,ubu[30],st[30],viz[30],num;
long costmin;

void citire()
{int i,m,j,k,x,y;
long cost;
    fin>>n>>m;
    fin>>num;
    for(i=1;i<=num;i++)fin>>ubu[i];
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)c[i][j]=inf;
   for(i=1;i<=n;i++)c[i][i]=0;
    for(i=1;i<=m;i++)
       {fin>>x>>y>>cost;
        c[x][y]=c[y][x]=cost;}

    //:
    for(k=1;k<=n;k++)
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
            c[i][j]=min(c[i][j],c[i][k]+c[k][j]);
          fin.close();
}

void afisare()
{int i;
long cost;
cost=0;
cost=c[1][ubu[st[1]]];
for(i=1;i<num;i++)
    cost+=c[ ubu[st[i]] ][ ubu[st[i+1]] ];
cost+=c[ubu[st[num]]][n];
if(cost<costmin)costmin=cost;

}

void gen(int k)
{
        if(k==num+1)
            afisare();
        else
    for(int i=1;i<=num;i++)
        if(!viz[i])
            {st[k]=i;viz[i]=1;
             gen(k+1);viz[i]=0;
            }

}

int main()
{
    citire();
    costmin=inf;
    gen(1);
    fout<<costmin;

}