Pagini recente » Cod sursa (job #407936) | Cod sursa (job #2111854) | Cod sursa (job #2709007) | Cod sursa (job #1087220) | Cod sursa (job #1280603)
#include <fstream>
#define inf 100000
using namespace std;
ifstream fin ("hamilton.in");
ofstream fout ("hamilton.out");
int n, m;
int C[101][101];
int sol[101], cost;
int solmin[101], costmin;
bool uz[101];
void citire();
void initializare();
void generare(int);
void afisare();
int main()
{citire();
initializare();
generare(1);
afisare();
return 0;
}
void citire()
{
int i, x, y, c;
fin>>n>>m;
initializare();
for(i=1;i<=m;i++)
{
fin>>x>>y>>c;
C[x][y]=c;
}
}
void initializare()
{
int i, j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
C[i][j]=inf;
if(i==j)
C[i][j]=0;
}
sol[1]=1;
costmin=inf;
}
void generare(int k)
{int i,j;
if(cost>costmin)
return;
if(k==n+1)
{
if(C[sol[n]][1]==inf)
return;
cost+=C[sol[n]][1];
if(cost<costmin)
{
for(j=1;j<=n;j++)
solmin[j]=sol[j];
costmin=cost;
}
cost-=C[sol[n]][1];
return;
}
for(i=2;i<=n;i++)
if(!uz[i] && C[sol[k-1]][i]!=inf)
{
uz[i]=1;
sol[k]=i;
cost+=C[sol[k-1]][i];
generare(k+1);
}
}
void afisare()
{
fout<<costmin<<'\n';
}