Cod sursa(job #1662592)

Utilizator aldea_caldea c. aldea_c Data 24 martie 2016 21:37:59
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <iostream>
#include <fstream>
using namespace std;
float a[2000][2000];
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
int n,m,k,c[16],v[16],viz[16],sol[16],mini=107;

void citire()
{
    int i,x,y,cst;
    f>>n>>m;
    f>>k;
    for(i=1; i<=k; i++)
        f>>c[i];
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++){
      a[i][j]=107;
      if(i==j)a[i][j]=0;}
    for(i=1; i<=m; i++)
    {
        f>>x>>y>>cst;
        a[x][y]=a[y][x]=cst;
    }

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

}
void calcul()
{int sum=0;sum+=a[1][c[v[1]]]+a[c[v[k]]][n];
    for(int i=1;i<k;i++){cout<<c[v[i]]<<" ";
    sum=sum+a[c[v[i]]][c[v[i+1]]];}
    if (sum<mini){mini=sum;
    for(int i=1;i<=k;i++)
    sol[i]=c[v[i]];}
    cout<<endl;
}

void permutari(int p)
{
    if(p==k+1)
        calcul();
    else for(int i=1; i<=k; i++)
        {
            if(viz[i]==0)
            {
                v[p]=i;
               viz[i]=1;
                permutari(p+1);
              viz[i]=0;
            }
        }
}
int main()
{
    citire();
    roy_floyd();
    for(int i=1;i<=n;i++){
      for(int j=1;j<=n;j++)
      cout<<a[i][j]<<" ";
      cout<<endl;}
    permutari(1);
   g<<mini;
    return 0;
}