Cod sursa(job #3370505)

Utilizator Andrada_MincaAndrada Minca Andrada_Minca Data 26 octombrie 2026 14:39:01
Problema Ciclu hamiltonian de cost minim Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("hamilton.in");
ofstream cout("hamilton.out");
int a[20][20];
int n,p;
int mi=20000000;
vector<vector<int>>m(20);
vector<vector<int>> dp((1<<18)+1,vector<int>(20,20000000));
bool ok(int stare, int x) {
    return !((stare>>x)&1);
}
void fct(int i,int stare) {
    for (auto x:m[i]) {
        int kstare=stare|(1<<x);
        if (x==0&&stare==(1<<n)-1)mi=min(mi,dp[stare][i]+a[i][x]);
        if (ok(stare,x)) {
            dp[kstare][x]=min(dp[kstare][x],dp[stare][i]+a[i][x]);
            //cout<<"sunt in starea "<<(stare|(1<<x))<<" se termina in "<<x<<" are val "<<dp[stare|(1<<x)][x]<<endl;
            fct(x,kstare);
        }
    }
}
int main() {
    cin>>n>>p;
    for (int i=0;i<p;i++) {
        int x,y,c;
        cin>>x>>y>>c;
        a[x][y]=c;
        m[x].push_back(y);
    }
    dp[1][0]=0;
    fct(0,1);
    if (mi!=20000000)cout<<mi;
    else cout<<"Nu exista solutie";
}