Pagini recente » Cod sursa (job #1664598) | Cod sursa (job #491487) | Cod sursa (job #770882) | Cod sursa (job #1859705) | Cod sursa (job #2104536)
#include <fstream>
using namespace std;
ifstream fin("combinari.in");
ofstream fout("combinari.out");
int n, p, k;
int st[20];
int viz[20];
inline void init()
{
st[k]=0;
}
inline bool succesor()
{
if(st[k]<n)
{
st[k]++;
return 1;
}
else
return 0;
}
inline bool valid()
{
if(viz[st[k]])
{
return 0;
}
else
{
if(st[k-1]>st[k])
return 0;
else
{
viz[st[k]]=1;
return 1;
}
}
}
inline void afisare()
{
int i;
for(i=1;i<=p;i++)
fout<<st[i]<<" ";
fout<<"\n";
}
inline bool solutie()
{
return k==p;
}
void backt()
{
bool es, ev;
k=1;
init();
while(k>0)
{
do{
es=succesor();
if(es)
ev=valid();
}while(es and !ev);
if(es)//avem succesor
{
if(solutie())
{
afisare();
viz[st[k]]=0;
}
else
{
k++;
init();
}
}
else //nu avem succesor
{
k--;
viz[st[k]]=0;
}
}
}
int main()
{
fin>>n>>p;
backt();
return 0;
}