Pagini recente » Cod sursa (job #1078245) | Cod sursa (job #1196622) | Cod sursa (job #701808) | Cod sursa (job #401681) | Cod sursa (job #675963)
Cod sursa(job #675963)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int n,m,i,j,S[262200][20],cost[20][20],INF=100000000;
vector<int> V[20];
void read(),solve();
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
int x,y;
scanf("%d%d",&n,&m);
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)cost[i][j]=INF;
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
V[y].push_back(x);
scanf("%d",&cost[x][y]);
}
for(i=0;i< (1<<n);i++)
for(j=0;j<n;j++)
S[i][j]=INF;
}
void solve()
{
S[1][0]=0;
for(i=0;i< (1<<n);i++)
{
for(j=0;j<n;j++)
{
if(i&(1<<j))
{
for(vector<int>::iterator it=V[j].begin();it!=V[j].end();it++)
{
if(i&(1<<*it))
{
S[i][j]=min(S[i][j],S[i^(1<<j)][*it]+cost[*it][j]);
}
}
}
}
}
int sol=INF;
for(vector<int>::iterator it=V[0].begin();it!=V[0].end();it++)
sol=min(sol,S[(1<<n)-1][*it]+cost[*it][0]);
if(sol==INF)printf("Nu exista solutie\n");
else printf("%d\n",sol);
}