Cod sursa(job #2060491)

Utilizator vazanIonescu Victor Razvan vazan Data 8 noiembrie 2017 12:25:31
Problema Ciclu hamiltonian de cost minim Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<fstream>
using namespace std;

#define MMAX 400
#define NMAX 20

int ma[NMAX][NMAX], n, m;
int add(int a, int b, int c){
    ma[a][b] = c;
}
using namespace std;
const int INF = 100000000;
int sol = INF;

bool viz[NMAX];

void dfs(int nod, int dd, int sum){
    if(dd == n){
        if(ma[nod][0] < INF){
            sum += ma[nod][0];
            if(sum < sol)
                sol = sum;
        }
        return;
    }
    viz[nod] = 1;
    for(int i = 1; i <= n; i++){
        if(!viz[i] && ma[nod][i] < INF)
            dfs(i, dd + 1, sum + ma[nod][i]);
    }
    viz[nod] = 0;
}

int main(){
    ifstream fin("hamilton.in");
    ofstream fout("hamilton.out");
    fin >> n >> m;
    int a, b, c;
    for(int i = 0; i < NMAX; i++)
        for(int j = 0; j < NMAX; j++)
            ma[i][j] = INF;
    for(int i = 1; i <= m; i++){
        fin >> a >> b >> c;
        add(a, b, c);
    }
    dfs(0, 1, 0);
    if(sol < INF)
        fout << sol;
    else
        fout << "Nu exista solutie";
    return 0;

}