Cod sursa(job #1481740)

Utilizator tiby10Tibi P tiby10 Data 5 septembrie 2015 10:34:30
Problema Ciclu hamiltonian de cost minim Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
#define MAXN 20
#define pb push_back
#define mp make_pair
#define v first
#define c second
int n, m, low=(1<<30), k, G2[MAXN][MAXN];
vector<int> G[MAXN];
int used[MAXN];

void dfs(int node, int cnt, int cost){
    used[node]=1;
    if(cnt==n){
        k=G2[node][0];
        if(k)
            low=min(low, cost+k);
        used[node]=0;;
    }
    for(auto vec : G[node])
        if(!used[vec])
            dfs(vec, cnt+1, cost+G2[node][vec]);
    used[node]=0;
}

int main()
{
    int x, y, z;
    fin>>n>>m;
    while(m--){
        fin>>x>>y>>z;
        G[x].pb(y);
        G2[x][y]=z;
    }
    dfs(0, 1, 0);
    low==(1<<30)?fout<<"Nu exista solutie":fout<<low;
    return 0;
}