Cod sursa(job #1561128)

Utilizator Vlad1111Sbengheci Vlad-Andrei Vlad1111 Data 3 ianuarie 2016 18:08:50
Problema Ciclu hamiltonian de cost minim Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <cstdio>

using namespace std;

struct nod
{
    int inf,cost;
    nod*a;
}*p[20];

int n,m,mini,s[20],nr;

int ver()
{
    for(int i=0;i<n;i++)
        if(s[i]==0)
            return 0;
    return 1;
}

void par(int x)
{
    //cout<<x<<" ";
    if(x==1 && s[1]==1)
    {
        if(nr<mini)
            if(ver())
                mini=nr;
       // cout<<endl<<"!"<<nr<<" "<<mini<<endl;
    }
    else if(nr<mini)
    {
        for(nod*c=p[x];c!=NULL;c=c->a)
            if(s[c->inf]==0)
        {
            s[c->inf]=1;
            nr+=c->cost;
            par(c->inf);
            s[c->inf]=0;
            nr-=c->cost;
        }
    }
}

int main()
{
    freopen("hamilton.in","r",stdin);
    freopen("hamilton.out","w",stdout);
    scanf("%d %d",&n,&m);
    int x,y,z;
    for(int i=0;i<m;i++)
    {
        scanf("%d %d %d",&x,&y,&z);
        mini+=z;
        nod*c=new nod;
        c->inf=y;
        c->cost=z;
        c->a=p[x];
        p[x]=c;
    }
    nr=0;
    par(1);
    if(mini)
        printf("%d",mini);
    else printf("Nu exista solutie");
    return 0;
}