Pagini recente » Cod sursa (job #2642353) | Cod sursa (job #1385169) | Cod sursa (job #2261472) | Cod sursa (job #2634619) | Cod sursa (job #2435406)
#include <iostream>
#include <fstream>
#include <vector>
std::ifstream fin("hamilton.in");
std::ofstream fout("hamilton.out");
int n,m;
int c[262250][20];
struct elem
{
int dest, cost;
};
std::vector<elem> v[20];
int main()
{
fin>>n>>m;
for(int i=0;i<m;i++)
{
int j,k,o;
fin>>j>>k>>o;
v[k].push_back({j,o});
}
for(int i=0;i<(1<<n);i++)
for(int j=0;j<n;j++)
c[i][j]=1<<30;
c[1][0]=0;
for(int i=0;i<(1<<n);i++)
for(int j=0;j<n;j++)
if((i&(1<<j))!=0)
for(unsigned int k=0;k<v[j].size();k++)
{
elem o=v[j][k];
if((i&(1<<o.dest)))
c[i][j]=std::min(c[i][j],c[i^(1<<j)][o.dest]+o.cost);
}
int sol=1<<30;
for(int i=0;i<v[0].size();i++)
{
elem o = v[0][i];
sol=std::min(sol,c[(1<<n)-1][o.dest]+o.cost);
}
if(sol!=(1<<30)!=0)
fout<<sol;
else
fout<<"Nu exista solutie";
}