#205 Shuffle

Cerinţa
Se citeşte un număr natural nenul n şi o permutare a mulţimii M={1,2,..,n}. Să se afişeze, în ordine lexicografică, toate permutările mulţimii M care nu conţin elemente alăturate care au fost alăturate şi în permutarea dată.

Date de intrare
Fişierul de intrare shuffle.in conţine pe prima linie numărul n, iar pe a doua linie n valori distincte cuprinse între 1 și n, separate prin câte un spațiu, reprezentând permutarea dată.

Date de ieşire
Fişierul de ieşire shuffle.out va conţine pe fiecare linie elementele unei permutări, separate prin câte un spaţiu.

Restricţii şi precizări
0 < n < 9
dacă nu există soluţii se va afişa pe prima linie a fişierului de ieşire mesajul nu exista

Rezolvarea am scris o dar nu imi da decat 10 puncte desi pare corect:
#include
#include

using namespace std;

ifstream fin("shuffle.in");
ofstream fout("shuffle.out");

int n, v[20], x[20], w[20];
bool ok1=0;

void afis()
{
for(int i=1;i<=n;i++)
fout< fout<<'\n';
ok1=1;
}



int ok()
{
for(int i=1;i for(int j=1;j<=n;j++)
if((v[i]==w[j] && v[i+1] == w[j+1]) || (v[i]==w[j] && v[i-1]==w[j+1]))
return 0;
return 1;

}

void back(int k)
{
for(int i=n;i>=1;i--)
{
if(!x[i])
{
v[k]=w[i];
x[i]=1;
if(k back(k+1);
else
if(ok())
afis();
x[i]=0;
}

}
}


int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>w[i];
back(1);
if(ok1==0)
fout<<"nu exista";
}






Răspuns :

coroana te rog

#include<iostream>

#include<fstream>

using namespace std;

ifstream f("shuffle.in");

ofstream g("shuffle.out");

int n,s[11],p[11],c1[11],c2[11],a[11],k;

void afis(){

   for(int i=1;i<=n;i++)

       g<<s[i]<<" ";

   g<<endl;

   k++;

}

void back(int k) {

   for(int i=1;i<=n;i++)

       if(p[i]==0&&s[k-1]!=c1[i]&&s[k-1]!=c2[i]){

           p[i]=1;

           s[k]=i;

           if(k==n)

               afis();

           else

               back(k+1);

           p[i]=0;

       }

}

int main() {

   f>>n;

   for(int i=1;i<=n;i++)

       f>>a[i];

   a[0]=-1;

   a[n+1]=-1;

   for(int i=1;i<=n;i++){

       c1[a[i]]=a[i-1];

       c2[a[i]]=a[i+1];

   }

   back(1);

   if(k==0)

       g<<"nu exista";

   return 0;

}

Vă mulțumim că ați vizitat platforma noastră dedicată Informatică. Ne bucurăm dacă informațiile oferite v-au fost de folos. Pentru orice întrebări sau sprijin suplimentar, suntem aici pentru voi – nu ezitați să ne contactați. Vă așteptăm cu drag să reveniți și vă sugerăm să ne salvați în lista de site-uri preferate!


RO Studier: Alte intrebari