Pagini recente » Cod sursa (job #3216295) | Cod sursa (job #546915) | Cod sursa (job #2644398) | Cod sursa (job #2647420) | Cod sursa (job #526802)
Cod sursa(job #526802)
#include <fstream>
using namespace std;
#define MAXN 8
ifstream f("permutari.in");
ofstream g("permutari.out");
void gen_permutari(int solution[], int N, int k);
bool isSolution(int solution[], int N, int k);
void processSolution(int solution[], int k);
void generateCandidates(int solution[], int N, int k, int candidates[], int *numCandidates);
int main(void)
{
int N;
int solution[MAXN+1];
f >> N;
gen_permutari(solution, N, 0);
f.close();
g.close();
return 0;
}
void gen_permutari(int solution[], int N, int k)
{
if (isSolution(solution,N,k))
{
processSolution(solution,k);
}
else
{
int i, numCandidates;
int candidates[MAXN];
k++;
generateCandidates(solution,N,k,candidates,&numCandidates);
for (i=0;i<numCandidates;i++)
{
solution[k] = candidates[i];
gen_permutari(solution,N,k);
}
}
}
bool isSolution(int solution[], int N, int k)
{
return k == N;
}
void processSolution(int solution[], int k)
{
for (int i=1;i<=k;i++)
{
g << solution[i] << " ";
}
g << "\n";
}
void generateCandidates(int solution[], int N, int k, int candidates[], int *numCandidates)
{
int i, inPerm[MAXN];
for (i=0;i<N;i++) inPerm[i] = false;
for (i=1;i<k;i++) inPerm[solution[i]-1] = true;
*numCandidates = 0;
for (i=1;i<=N;i++)
{
if (!inPerm[i-1])
{
candidates[*numCandidates] = i;
*numCandidates += 1;
}
}
}