Backtracking
recursiv
In cazul variantei recursive rutina
back se defineste ca o functie recursiva cu parametrul k (nivelul curent din
stiva). Urcarea in stiva se face prin
autoapelul functiei back cu o noua valoare pentru k. Generarea potentialilor candidati la solutie
se face print-o instructiune for care parcurge
valorile posibile de la limita inferioara la limita superioara. Iata solutia
pentru problema permutarilor.
#include<iostream.h>
#include<conio.h>
int st[20],n;
void tipar()
{for(int
i=1;i<=n;i++)
cout<<st[i]<<' ';
cout<<endl;}
int valid(int k)
{ for(int
i=1;i<=k-1;i++)
if (st[i]==st[k])
return 0;
return 1;}
void back(int k)
{for(int
i=1;i<=n;i++)
{st[k]=i;
if (valid(k))
if(k==n)
tipar();
else
back(k+1);
}
}
void main()
{clrscr();
cout<<"n=";
cin>>n;
back(1);
getch();
}