Jump to content
Krisler12

Ajutor cu modificarea unui algoritm de backtracking

Recommended Posts

Posted

Ajutor cu modificarea unui algoritm de backtracking..., Generarea de variante diferite in functie de cele citite din fisier

Salut !

Am si eu nevoie daca se poate sa ma ajutati cu o chestie la acest algoritm:

Algoritm:

#include <iostream>
#include <stdio.h>
#include <fstream>
using namespace std;

int n, x[15];
int a[50];


ofstream out("output.txt");


void afisare(int k)
{
int i;
for(i=1;i<=k;i++) out<<a[x[i]]<<" ";
out<<"\n";
}

bool posibil(int k)
{
int i;
for (i=1;i<=k-1;i++) if (a[x[k]]<=a[x[i]]) return 0;
return 1;

}


void bk(int n)
{
bool cont;
int k=1;
x[k]=0;
while (k>0)
{
cont=0;
while ((x[k]<49) && (cont==0))
{
x[k]++;

if (posibil(k))
{
cont=1;
}
}
if (cont==0)
k--;
else if (k==n)
{

afisare(k);

}
else
{
k++;
x[k]=0;
}
}
}




int main()
{
for (n=1;n<=49;n++) {a[n]=n;}
bk(6);
out.close();

}

Programul "are grija" sa nu mai fie numere identice in acelasi grup(varianta) de 6 numare in cazul de fata. Face chestia asta cu ajutorul acestei expresii:

for (i=1;i<=k-1;i++) if (a[x[k]]<=a[x[i]]) return 0;

Acum, programul nu va genera niciodata nici aceleasi numere intr-o varianta de cate 6 (datorita expresiei de cod de mai sus) dar nu va genera niciodata si nici aceleasi variante (adica nu va genera niciodata 1,2,3,4,5,6 si dupa ceva timp sau imediat iarasi 1,2,3,4,5,6) ptr. ca avem acel for acolo in main si asta face ca programul sa continuie generarea de acolo de unde a ramas si nu sa o ia de la capat iar cu 1.

Acum, problema cu care va rog eu tare mult sa ma ajutati si la care nu ii dau de capat este urmatoarea:

Cum fac acest program sa faca urmatorul lucru:

-sa ii dau un fiiser in care sunt scrise variante de cate 6 numere, pe care sa-l citeasca pana la sfarsitul sau.

-atunci cand genereaza acele numere cum v-am aratat ca face mai sus, sa ia in considerare si variantele pe care tocmai le-a citit din fisier si sa faca de exemplu urmatorul lucru:

1) daca varianta generata are mai mult de 3 numere in comun cu ultima varianta citita din fisier atunci sa nu o mai genereze si sa incerce sa evite chestia asta;

2)daca varianta generata are mai mult de 3 numere in comun cu ultimele doua variante citite din fisier atunci sa nu o mai genereze si sa incerce sa evite chestia asta (exact la fel ca la primul punct);

3) cum fac de exemplu sa ia in considerare daca are 3 sau mai mult de 3 numere doar cu penultima varianta fara a mai lua in considerare ultima varianta ?

?

Multumesc mult de tot !

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...