Cod sursa(job #2194265)

Utilizator IustinPetrariuIustinian Petrariu IustinPetrariu Data 12 aprilie 2018 18:15:05
Problema Ciclu hamiltonian de cost minim Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <vector>
#define inf 10000001
#define nmax 101

using namespace std;
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
int x[nmax],c[nmax][nmax],N,M;
int res,uz[nmax],sol,w,y,cost,A[nmax][nmax];
void answer(int k)
{
    if(k==N+1)
    {
        if(A[x[1]][x[N]])
        {
            for(int i = 1; i < N ; i ++)
                res+=c[x[i]][x[i+1]];
            sol=min(sol,res);
        }
    }
    else
    {
        for(int node= 0 ; node < N; node ++)
            if(!uz[node])
        {
            uz[node]=1;
            x[k]=node;
            answer(k+1);
            uz[node]=0;

        }
    }
}
void citire()
{
    fin>>N>>M;
    sol=inf;
    for(int i =0 ; i < N; i ++)
        for(int j =0; j < M; j++)
         c[i][j]=inf;
    for(int i =1 ; i <= M; i++)
    {
        fin>>w>>y>>cost;
        A[w][y]=A[y][w]=1;
        c[w][y]=cost;
    }
}
int main()
{
    citire();
    answer(1);
    if(sol==inf) fout<<"Nu exista solutie"<<'\n';
    else fout<<sol<<'\n';

    return 0;
}