rendered paste body#include<iostream>
using namespace std;
/******************************************************************************/
bool promising(int i,int n,bool **W,int vindex[])
{
int j;
bool zmiana;
if(i == n-1 && !W[vindex[n-1]][vindex[0]])
zmiana=0;
else if (i>0 && !W[vindex[i-1]][vindex[i]])
zmiana=0;
else { zmiana=1;
j=1;
while (j<i && zmiana)
{
if(vindex[i]==vindex[j])
zmiana=0;
j++;
}
}
return zmiana;
}
/******************************************************************************/
void hamilton (int i,int n,bool **W,int vindex[])
{
int j;
if( promising( i , n , W , vindex ))
if(i==n-1)
{
for(int b=0;b<n;b++)
{cout<< vindex[b]<<",";}
cout<<"\n";
}
else
for(j=2;j<=n;j++)
{
vindex[i+1]=j;
hamilton(i+1,n,W,vindex);
}
}
/******************************************************************************/
main()
{
int n=1000;
cout<<"podaj ile wieszcholkow bedzie mial Twoj graf\n";
cin>>n;
bool **W;
W = new bool*[n+1];
W[0] = new bool [(n+1)*(n+1)];
for(int i = 1;i<(n+1);i++)
{
W[i]= W[i-1]+(n+1);
}
int vindex[n] ;
for(int i=0;i<n;i++)
{vindex[i]=1;}
cout<<"podaj \"1\" jesli tak,\"0\"jesli nie\n";
for(int i=1;i<=n;i++)
{
for (int z=1+i;z<=n;z++)
{
cout<<"czy wieszcholek "<<i<< " sasiaduje z wieszcholkiem "<<z<<" ";
bool pom=0;
cin>>pom;
W[i][z]=pom;
W[z][i]=pom;
}
}
for(int i=1;i<=n;i++)
{W[i][i]=0;}
cout<<"tak wyglada Twoja macierz sasiedztw\n";
for(int z=1;z<=n;z++)
{
cout<<"\n";
for(int x=1;x<=n;x++)
{cout<<W[z][x];}
}
cout<<"\na o to wszystkie mozliwe cykle hamiltona zaczynajace sie od wieszcholka 1\n";
vindex[0]=1;
hamilton(0,n,W,vindex);