Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- using namespace std;
- ifstream fin ("hmmm.in");
- ofstream fout("hmmm.out");
- int v[15], st[15], n, pus[15], x[15], k;
- bool verifPermE(){
- int i;
- for (i = 1;i <= n;i++)
- if (x[i] != i)
- return false;
- return true;
- }
- int calcGrad(){
- int nr = 0, i;
- for (i = 1;i <= n;i++)
- x[i] = st[i];
- bool ok = false;
- while (!ok){
- ok = verifPermE();
- for (i = 1;i <= n;i++)
- x[i] = st[x[i]];
- nr++;
- }
- return nr;
- }
- int verif (){
- int grad = k%calcGrad(), i, w;
- if (!grad){
- for (i = 1;i <= n;i++)
- if (v[i] != i)
- return 0;
- return 1;
- }
- for (i = 1;i <= n;i++){
- w = grad-1;
- while (w){
- x[i] = st[x[i]];
- w--;
- }
- if (x[i] != v[i])
- return 0;
- }
- return 1;
- }
- void tipar (){
- int i;
- for (i = 1;i <= n;i++)
- fout << st[i] << " ";
- fout << '\n';
- }
- void BKT (int k){
- int i;
- for (i = 1;i <= n;i++){
- if (!pus[i]){
- pus[i] = 1;
- st[k] = i;
- if (k == n && verif())
- tipar ();
- else BKT (k+1);
- pus[i] = 0;
- }
- }
- }
- int main(){
- int i;
- fin >> n >> k;
- for (i = 1;i <= n;i++)
- fin >> v[i];
- BKT (1);
- fin.close();
- fout.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement