Documente Academic
Documente Profesional
Documente Cultură
Aplicatii Backtracking
Aplicatii Backtracking
#include<iostream>
#include<stdlib.h>
using namespace std;
int n,sol[10],a[10];
void init(int k)
{sol[k]=0;}
void tipar()
{int i;
for(i=1;i<=n;i++)
cout<<sol[i]<<" ";
cout<<endl;
}
int solutie(int k)
{return k==n+1;}
int succesor(int k)
{ if(sol[k]<a[k])
{sol[k]++;
return 1;
}
else return 0;
Metoda Backtracking
int valid(int k)
{return 1;
}
void back(int k)
{ if(solutie(k))tipar();
else{ init(k);
while(succesor(k))
if(valid(k))
back(k+1);
}
}
int main()
{
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
back(1);
return 0;
}
#include<iostream>
using namespace std;
int n,sol[10];
void init(int k)
{sol[k]=-1;}
2
Metoda Backtracking
void tipar()
{int i;
for(i=1;i<=n;i++)
cout<<sol[i]<<" ";
cout<<endl;
}
int solutie(int k)
{return k==n+1;}
int succesor(int k)
{ if(sol[k]<1)
{sol[k]++;
return 1;
}
else return 0;
}
int valid(int k)
{return 1;
}
void back(int k)
{ if(solutie(k))tipar();
else{ init(k);
while(succesor(k))
if(valid(k))
back(k+1);
}
}
int main()
{
cout<<"n=";cin>>n;
back(1);
return 0;
}
3
Metoda Backtracking
şah, astfel încât să nu se afle pe aceeaşi linie, coloană, sau diagonală (damele să nu se
atace). Exemplu pentru n=4 o soluţie este:
4
Metoda Backtracking
5
Metoda Backtracking
#include<iostream>
#include<stdlib.h>
using namespace std;
int n,sol[10];
void init(int k)
{sol[k]=0;}
void tipar()
{int i;
for(i=1;i<=n;i++)
cout<<sol[i]<<" ";
cout<<endl;
}
int solutie(int k)
{return k==n+1;}
int succesor(int k)
{ if(sol[k]<n)
{sol[k]++;
return 1;
}
else return 0;
}
int valid(int k)
{int ev=1;
for(i=1;i<=k-1;i++)
if(sol[k]==sol[i] || abs(sol[k]-sol[i])==abs(k-i)) ev=0;
return ev;
}
void back(int k)
{ if(solutie(k))tipar();
else{ init(k);
while(succesor(k))
if(valid(k))
back(k+1);
}
}
int main()
{
6
Metoda Backtracking
cout<<"n=";cin>>n;
back(1);
return 0;
}