Cod sursa(job #395083)

Utilizator alexander92Coanca Mihai Alexandru alexander92 Data 12 februarie 2010 08:06:47
Problema Ciclu hamiltonian de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include<iostream.h>
#include<fstream.h>
int a[50][50],n,i,j,x[50],k,sol;
ifstream f("hamilton.in");
void citire(){
	f>>n;
	while(f>>i>>j)
		a[i][j]=a[j][i]=1;
}
void tipar(int k){
	for(i=1;i<=k;i++)
		cout<<x[k]<<" ";
	cout<<endl;
}
int cont(int k){
	if(a[x[k]][x[k-1]]==0)
		return 0;
	for(i=1;i<k;i++)
		if(x[i]==x[k])
			return 0;
	if(k==n)
		if(a[x[k]][x[1]]==0)
			return 0;
	return 1;
}
void back(){
	x[1]=1;
	k=2;
	x[k]=1;
	while(k>1)
		if(x[k]<n){
			x[k]++;
			if(cont(k))
				if(k==n){
					sol=1;
					tipar(k);
				}
				else x[++k]=1;
		}
		else k--;
}
int main(){
	citire();
	back();
	if(sol==0)
		cout<<"nu este solutie";
	return 0;
}