Cod sursa(job #2351065)

Utilizator andaraluca2001Anda Epure andaraluca2001 Data 21 februarie 2019 22:20:01
Problema Ciclu hamiltonian de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>



using namespace std;

int n,m,c[20][20],a[20][20],x,y,cost,d[262144][20];



ifstream in("hamilton.in");

ofstream out("hamilton.out");



const int INF=1e9;



int main()

{

    in>>n>>m;



       for(int i=0;i<n;i++)

    {

        for(int j=0;j<n;j++) c[i][j]=INF;





     }







     int val=(1<<n);



    for(int i=0;i<val;i++)

      for(int j=0;j<n;j++) d[i][j]=INF;



    for(int i=1;i<=m;i++)

    {

        in>>x>>y>>cost;

        a[x][y]=1;

        c[x][y]=cost;







    }







    d[1][0]=0;



    for(int i=3;i<val;i+=2)

    {



       for(int j=0;j<n;j++)

       {

          if(i&(1<<j))

          {

             int ii=i^(1<<j);



             for(int jj=0;jj<n;jj++)

             {

                 if(ii & (1<<jj)) d[i][j]=min(d[i][j],d[ii][jj]+c[jj][j]);



             }



          }



       }



    }



    int mini=99999999;

    for(int i=0;i<n;i++) mini=min(mini,d[(1<<n)-1][i]+c[i][0]);



    if(mini!=99999999)out<<mini;

    else out<<"Nu exista solutie";







    return 0;

}