Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Backtacking - Permutari  (Citit de 3079 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
casz
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 5



Vezi Profilul
« : August 03, 2013, 19:53:35 »

Salut, am si eu o problema si as vrea daca se poate sa mi-o explice cineva.

As vrea sa imi explice cineva cum se trece prin fiecare pas din problema.

De exemplu, pentru n=3. Ce se intampla in cod, cum functioneaza? cum circula 3-ul asta prin problema.

Cod:
#include<iostream>
using namespace std;

const MAX=20;
int n,v[MAX];

int valid(int k);
int solutie(int k);
void afisare(int k);
void BK(int k);

int valid(int k)

{
int i;
for(i=1; i<k; i++)
if(v[i]==v[k])
return 0;
return 1;
}

int solutie(int k)

{
if(k==n)
return 1;
return 0;
}

void afisare(int k)
{
int i;
for(i=1; i<=k; i++)
cout<<v[i]<<"";
cout<<endl;
}


void BK(int k)

{
int i;

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

{
v[k]=i;
if(valid(k))

{
if(solutie(k))
afisare(k);

else

BK(k+1);
}
}
}

int main()

{
cout<<"n=";
cin>>n;

BK(1);
return 0;

}
« Ultima modificare: August 05, 2013, 12:14:01 de către Andrei Grigorean » Memorat
casz
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 5



Vezi Profilul
« Răspunde #1 : August 05, 2013, 11:59:37 »

Nu stie nimeni?
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #2 : August 05, 2013, 12:14:42 »

Foloseste tagul "code" si indenteaza daca vrei sa iti citeasca cineva sursele Smile.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
casz
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 5



Vezi Profilul
« Răspunde #3 : August 06, 2013, 14:48:15 »

nu stie nimeni:))
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #4 : August 06, 2013, 16:09:12 »

Stie multa lume de pe infoarena, dar nimeni nu e dispus sa isi faca un scop in viata din a-ti citi sursele. Ori scrii o sursa cat de cat lizibila, ori nu te va ajuta nimeni.
Memorat
CosminRusu
De-al casei
***

Karma: 77
Deconectat Deconectat

Mesaje: 104



Vezi Profilul
« Răspunde #5 : August 06, 2013, 17:21:49 »

Salut, am si eu o problema si as vrea daca se poate sa mi-o explice cineva.

As vrea sa imi explice cineva cum se trece prin fiecare pas din problema.

De exemplu, pentru n=3. Ce se intampla in cod, cum functioneaza? cum circula 3-ul asta prin problema.

Cod:
#include<iostream>
using namespace std;

const MAX=20;
int n,v[MAX];

int valid(int k);
int solutie(int k);
void afisare(int k);
void BK(int k);

int valid(int k)

{
int i;
for(i=1; i<k; i++)
if(v[i]==v[k])
return 0;
return 1;
}

int solutie(int k)

{
if(k==n)
return 1;
return 0;
}

void afisare(int k)
{
int i;
for(i=1; i<=k; i++)
cout<<v[i]<<"";
cout<<endl;
}


void BK(int k)

{
int i;

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

{
v[k]=i;
if(valid(k))

{
if(solutie(k))
afisare(k);

else

BK(k+1);
}
}
}

int main()

{
cout<<"n=";
cin>>n;

BK(1);
return 0;

}


In primul rand puteai specifica de la inceput ca este vorba despre problema generarii permutarilor de N elemente (sper ca stiai lucrul asta), astfel nu le mai dadeai dureri de cap oamenilor care nu stau sa iti citeasca postul, ci scaneaza putin sursa si se sperie Smile).
In al doilea rand ar trebui sa te familiarizezi cu recursivitatea ca sa intelegi ce se intampla acolo, in sursa ta. Nu cred ca daca eu sau altcineva ti-ar spune pasii algoritmului ai invata foarte mult. Fa putin debug! Afiseaza-ti cand bagi in stiva nivelul ei si elementul curent. Uite aici poti rezolva problema asta (http://www.infoarena.ro/problema/permutari) si, fiind din arhiva educationala, ai acces la sursa oficiala cat si a tuturor userilor de top, ai comentarii din care sa intelegi ce si cum face algoritmul in cauza, plus ca ai o groaza de alte site-uri de unde poti afla informatii cate vrei!
In incheiere daca vrei sa te pui la punct cu metoda backtracking iti sugerez, pentru inceput, sa faci atat problema de mai sus cat si urmatoarele :
http://www.infoarena.ro/problema/submultimi
http://www.infoarena.ro/problema/combinari
Enjoy!
Memorat
casz
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 5



Vezi Profilul
« Răspunde #6 : August 08, 2013, 22:48:55 »

Problema e luata dintr-o carte si pusa aici. Daca va bagati putin ochii in ea, o sa descoperiti ca e usor de citit. Cosmin, multumesc de materiale, o sa ma uit pe ele sa vad ce si cum. Si inca consider ca daca mi-ar explica cineva ce am cerut, as intelege. Daca ar putea sa-si faca cineva timp sa se uite putin pe cod as fi recunoscator.
Memorat
costi_.-.
Strain
*

Karma: 2
Deconectat Deconectat

Mesaje: 30



Vezi Profilul
« Răspunde #7 : August 09, 2013, 00:29:41 »

Sper sa te ajute   .
http://www.mediafire.com/download/uafjazw9fabwgbc/bk.zip
« Ultima modificare: August 09, 2013, 10:33:46 de către Costinnel » Memorat
casz
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 5



Vezi Profilul
« Răspunde #8 : August 22, 2013, 12:34:31 »

Cu intarziere, dar iti multumesc pentru ajutor!
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines