Cod sursa(job #2339673)

Utilizator Anca.ioanaMuscalagiu Anca Ioana Anca.ioana Data 9 februarie 2019 11:04:44
Problema Ubuntzei Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <limits.h>
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
int k, V[201], D[20001][20001],n,m,minim=100000, S[201],s=0;
int viz[101];
void Citire()
{int i, j,x,y,c,inf=100000;
f>>n>>m>>k;
for(i=1;i<=k;i++)
    f>>V[i];
for(i=1;i<=n;i++)
 for(j=1;j<=n;j++)
   { if(i==j)
     D[i][j]=0;
     else
    D[i][j]=100000;}
   for(i=1;i<=m;i++)
   {f>>x>>y>>c;
    D[x][y]=c;
    }

}
void Roy_Floyd()
{int l, i ,j;
 for(l=1;l<=n;l++)
    for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
         if(D[i][j]>D[i][l]+D[l][j]&&D[i][l]!=100000&&D[l][j]!=100000)
           D[i][j]=D[i][l]+D[l][j];
}
void Backtracking(int kk)
{int i,ok,j;
if(kk==k+1)
  {   s=s+D[1][V[S[1]]];
      for(i=1;i<k;i++)
       s=s+D[V[S[i]]][V[S[i+1]]];
    s=s+D[V[S[k]]][n];
   if(s<minim)
    minim=s;
    s=0;
  }
 else    { for(i=1;i<=k;i++)
                if(viz[i]==0)
               { S[kk]=i;
                viz[i]=1;
                Backtracking(kk+1);
                viz[i]=0;
               }
         }
}
int main()
{
Citire();
Roy_Floyd();
Backtracking(1);
if(k==0)
    g<<D[1][n]
else
g<<minim;
f.close();
g.close();
    return 0;
}