Cod sursa(job #1070528)

Utilizator raulmuresanRaul Muresan raulmuresan Data 1 ianuarie 2014 14:47:37
Problema Ubuntzei Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <fstream>
#include <algorithm>
#include<vector>
#include<queue>

using namespace std;

int b,componente,i,aux,n,k,j,p,s,unu,t,m,doi,x,q,dr,maxim,maxi2,y,conex,val,cont,a[210][210],cost,sol,st[100],viz[100];
int w[2000];


 ifstream fin("ubuntzei.in");
 ofstream fout("ubuntzei.out");

 void roy_floyd()
{
    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];
}
void tipar(int x)
{
    int j,sum=0;;
    for(j=2;j<=x;j++)
    {
        //fout<<st[j]<<" ";
        sum+=a[ w[st[j-1]]][w[st[j]]];
    }
    sum+=a[1][w[st[1]]];
    sum+=a[w[st[x]]][n];
    //fout<<"\n";
    if(sol>sum)
    sol=sum;
}

void back(int vf)
{
    int k;
    if(vf==aux+1)
    {
        tipar(aux);
    }
    for(k=1;k<=aux;k++)
    {
        if(viz[k]==0){
            st[vf]=k;
            viz[k]++;
            back(vf+1);
            viz[k]--;

        }
    }
}






int main()
{
    fin>>n>>m;
    fin>>k;
    for(i=1;i<=k;i++)
    {
        fin>>w[i];
    }
    for(i=1;i<=m;i++)
    {
        fin>>x>>y>>cost;
      //  fout<<x<<" "<<y<<" "<<cost<<"\n";
        a[x][y]=cost;
        a[y][x]=cost;

    }

    roy_floyd();
    aux=k;
    //fout<<aux;
    sol=100000000;
    back(1);
    if(k==0)fout<<a[1][n];
    else
    fout<<sol;

    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
           // fout<<a[i][j]<<" ";
        }
        //fout<<"\n";
    }
}