Cod sursa(job #2539147)

Utilizator As932Stanciu Andreea As932 Data 5 februarie 2020 18:14:29
Problema Ciclu hamiltonian de cost minim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <bitset>
using namespace std;
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");

int n,m,x,y,c,sum;
int sumMin=1e9;
int a[100][100];
int sol[100];
bitset <100> b;

void citire()
{
    fin>>n>>m;

    for(int i=1;i<=m;i++)
    {
        fin>>x>>y>>c;
        x++;
        y++;
        a[x][y]=c;
    }
}

void backtr(int pas)
{
    if(sum>=sumMin)
        return;

    if(pas==n+1)
    {
        if(a[sol[n]][1]==0)
            return;
        sum+=a[sol[n]][1];
        sumMin=min(sum,sumMin);
        sum-=a[sol[n]][1];
        return;
    }

    for(int i=2;i<=n;i++)
    {
        if(b[i]==0 && a[sol[pas-1]][i]!=0)
        {
            sol[pas]=i;
            b[i]=1;
            sum+=a[sol[pas-1]][i];
            backtr(pas+1);
            b[i]=0;
            sum-=a[sol[pas-1]][i];
        }
    }
}

int main()
{
    citire();
    sol[1]=1;
    b[1]=1;
    backtr(2);

    if(sumMin!=1e9)
        fout<<sumMin;
    else
        fout<<"Nu exista solutie";


    return 0;
}