Pagini recente » Cod sursa (job #431159) | Cod sursa (job #1632051) | Cod sursa (job #1887693) | Cod sursa (job #1935918) | Cod sursa (job #966707)
Cod sursa(job #966707)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
struct instance
{
int N;
int K;
};
typedef vector<int> config;
ofstream out ("combinari.out");
config root (instance P)
{
config c;
return c;
}
int bad (config c)
{
return !c.empty() && c[0] == -1;
}
int reject (instance P, config c)
{
if (c.size() > P.K)
return true;
for (int i = 0; i < (int) c.size() - 1; i++)
if (c[i] == c.back())
return true;
return false;
}
int accept (instance P, config c)
{
return c.size() == P.K;
}
config first (instance P, config c)
{
if (c.size () >= P.K)
{
//return bad config
config b;
b.push_back(-1);
return b;
}
if (c.empty())
c.push_back(1);
else
if (c.back() >= P.N)
{
//return bad config
config b;
b.push_back(-1);
return b;
}
else
c.push_back(c[c.size()-1] + 1);
return c;
}
config nexT (instance P, config c)
{
if (c.back() >= P.N)
{
//return bad config
config b;
b.push_back(-1);
return b;
}
c.back() ++;
return c;
}
void output (instance P, config c)
{
for (int i = 0; i < c.size(); i++)
out << c[i] << ' ';
out << endl;
}
void bt (instance P, config c)
{
if (reject (P, c))
return;
if (accept (P, c))
output (P, c);
config s;
s = first (P, c);
while (!bad(s))
{
bt (P, s);
s = nexT (P, s);
}
}
int main ()
{
ifstream in ("combinari.in");
instance P;
in >> P.N >> P.K;
bt (P, root(P));
return 0;
}