Pagini recente » Cod sursa (job #2147708) | Cod sursa (job #869643) | Cod sursa (job #1124495) | Cod sursa (job #2071070) | Cod sursa (job #1252043)
#include <cstdio>
#include <cstring>
#include <vector>
#define INF 1000000000
using namespace std;
struct ciclu
{
vector <int> nod;
vector <int> cost;
};
ciclu g[1001];
bool sel[1001];
int q[1001], Min=INF, n, s=0;
void dfs (int sursa, int x, int pas)
{
int i, y; q[pas]=x;
if (x==sursa && pas==n+1)
{
if (s<Min) Min=s;
return;
}
else if (pas>n+1) return;
else
{
sel[x]=true;
for (i=0; i<g[x].nod.size(); i++)
{
y=g[x].nod[i];
if (sel[g[x].nod[i]]==false)
{
s+=g[x].cost[i];
dfs(sursa,y,pas+1);
sel[y]=false;
}
else if (g[x].nod[i]==sursa && pas==n)
{
s+=g[x].cost[i];
dfs(sursa,y,pas+1);
sel[y]=false;
}
}
}
}
int main()
{
int m, i, x, y, z;
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1; i<=m; i++)
{
scanf("%d%d%d",&x,&y,&z);
g[x].nod.push_back(y);
g[x].cost.push_back(z);
}
for (i=0; i<n; i++)
{
memset(sel,0,sizeof(sel)); memset(q,0,sizeof(q)); s=0;
dfs(i,i,1);
}
if (Min!=INF) printf("%d\n",Min);
else printf("Nu exista solutie");
fclose(stdin);
fclose(stdout);
return 0;
}