Documente Academic
Documente Profesional
Documente Cultură
Backtracking
Variabile globale:
0, in caz contrar
0, in caz contrar
Subprograme:
4 functia succesor() - verifica daca mai exista vreo valoare netestata inca
pe nivelul k, caz in care se adauga in
combinatia partiala; va intoarce valoarea 1
sau 0 catre variabila as;
void bkt()
{k=1;
init();
while(k>0)
{as=1; ev=0;
while(as&&!ev)
{as=succesor();
if (as)
ev=valid();
}
if(as)
if (solutie())
tipar;
else
{k=k+1;
int c();
}
else
k=k+1;
}
}
#include<iostream>
using namespace std;
int st[100],n,k,as,ev;
void init();
{st[k]=0;
}
int succesor()
{if(st[k]=st[k+1];
return 1;
}
else
return 0;
}
int valid()
{for(int i=1;i<k;i++)
if(st[i]==st[k];
return 0;
if(k>1&&abs(st[k]=st[k-1])==1)
return 0;
return 1;
}
int solutie()
{return k==n;
}
void tipar()
{for(int i=1;i<=k;i++)
cout<<st[i]<<' ';
cout<<endl;
}
void bkt()
{k=1;init();
while(k>0)
{as=1;ev=0;
while(as&&!ev)
{as=succesor();
if(as)
ev=valid();
}
if(as)
if(solutia())
tipar();
else
{k=k+1;
init();
}
else
k=k-1;
}
int main()
{cout<<"n=";cin>>n;
bkt();
return 0;
}