Cod sursa(job #702642)

Utilizator bacilaBacila Emilian bacila Data 2 martie 2012 01:42:43
Problema Ciclu hamiltonian de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <vector>
#include <fstream>
#define mcon 262146
#define pb(x) push_back(x)
using namespace std;
vector<int> v[20];
int cost[20][20],c[mcon][20],n,m,x,y,rez=1<<30;
int chcm(int conf,int last)
{
    if(c[conf][last]==0)
    {c[conf][last]=1000000000;
                        for(int i=0;i<v[last].size();i++)
      if(conf&(1<<v[last][i]))                           
       {
       if(conf==(1<<last)+1||v[last][i]!=0)
       c[conf][last]=min(c[conf][last],chcm(conf^(1<<last),v[last][i])+cost[v[last][i]][last]);
       }                          
                                 
                                }
    if(c[conf][last]>0)                             
    return c[conf][last];
    else
    return 0;
    }

int main ()
{int i,j;
    ifstream f("hamilton.in");
 ofstream g("hamilton.out");
f>>n>>m;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cost[i][j]=1000000000;
while(m)
{f>>x>>y;
v[y].pb(x);
f>>cost[x][y];        
 m--;     }
c[1][0]=-1;
for(i=0;i<v[0].size();i++)
rez=min(rez,chcm((1<<n)-1,v[0][i])+cost[v[0][i]][0]);
if(rez<1000000000)
g<<rez;
else
g<<"Nu exista solutie";
 f.close(); g.close();
return 0;
}