Documente Academic
Documente Profesional
Documente Cultură
• spațiul soluțiilor
• funcție de validare
• ,
• pt. fiecare element al solutiei este definita multimea valorilor posibile
,
– - condiții de continuare
B. Intrebari
1.Generarea tuturor permutărilor
1.Generarea tuturor permutărilor
• Pas 4:
– Algoritmul se repetă până când nu se mai îndeplineşte condiţia:
indexul k al vectorului >0 (stiva este goală).
1.Generarea tuturor permutărilor
• void main()
• { int n, perm;
• printf("Dati n=");
• scanf("%d",&n);
• perm=permutari(n);
• }
2.Generarea tuturor submultimilor unei
multimi
2.Generarea tuturor submultimilor unei multimi.
EXEMPLU:
Pentru n=3 programul va genera
{}
{1} {2} {3}
{1,2} {1,3} {2,3}
{1,2,3}
2.Generarea tuturor submultimilor unei multimi.
SOLUTIE:
Solutia x[1]......x[n],
unde x[i] poate fi 0 (i nu apartine submultimii) sau 1 (i apartine submultimii)
Solutia Codificare
{} 000
{3} 001
{2} 010
{2,3} 011
{1} 100
{1,3} 101
{1,2} 110
{1,2,3} 111
Obs: x[k] poate fi 0 sau 1
2.Generarea tuturor submultimilor unei
multimi
• #include <conio.h> • void BackRec(int k)
• #include<stdio.h> • { int i;
• • for(i=0;i<=1;i++)
• • { x[k]=i;
• char sp[]=" "; • if (k==n) Afisare();
•
• else BackRec(k+1);
• int x[20], n, nrsol=0;
• }
•
• }
• void Afisare()
• { int i;
• printf("%c {",sp); //cout<<sp<<"{ ";
• for(i=1;i<=n;i++)
• if (x[i]==1) printf ("%d ",i); //cout<<i<<" ";
• printf (" }\n");//cout<<char(8)<<"}"<<endl;
• nrsol++;
• //if (nrsol%22==0) _getch();//cin.get();
• }
2.Generarea tuturor submultimilor unei
multimi
• int main()
• { printf ("\n\nSubmultimile multimii {1,2,3.....,n}\n ");
//cout<<endl<<endl<<sp<<"Submultimile multimii {1,2,3.....,n}"<<endl;
• printf(" Dati valoarea unui n:");
• scanf("%d", &n); //cout<<endl<<sp<<" Dati valoarea lui n: "; cin>>n;
• printf("\n"); //cout<<endl;
• BackRec(1);
• printf("Nr. solutii: %d\n", nrsol); //cout<<endl<<sp<<"Numar solutii:
"<<nrsol;
• _getch();
• return 0;
• }
•
3.Problema colorării hărților
3.Problema colorării hărților
• Enunt: Fiind data o harta cu n tari, se cer toate
solutiile de colorare a hartii, utilizand cel mult
patru culori, astfel incat doua tari ce au
frontiera comuna sa fie colorate diferit. Este
demonstrat faptul ca sunt suficiente numai
patru culori pentru ca orice harta sa poata fi
colorata.
3.Problema colorării hărților
• Exemplu de fisier pentru matrice:
Exemplu de rulare
A B C D
A0 1 0 1
B1 0 1 1
C0 1 0 1
D1 1 1 0
3.Problema colorării hărților
• #include<stdio.h> • void tipar()
• #include<conio.h>
• #include<math.h> • {for(int i=1;i<=n;i++)
• int st[20],n,k,a[20][20]; • printf ("Tara numarul %d ce are culoarea
•
• void init()
%d\n", i,st[i]);
• {st[k]=0;} • printf("\n\n");
• • }
• int succesor()
• {if (st[k]<4)
•
• {st[k]++; • void bkt()
• return 1; • {int as;k=1;
• }
• else return 0;} • init();
• • while(k>0)
•
•
int valid()
• {
{for(int i=1;i<k;i++)
• if(st[i]==st[k] && a[i][k]==1) return 0; • do {} while ((as=succesor()) && !valid());
• return 1;} • if (as)
•
• int sol()
• if (sol()) tipar();
• {return (k==n);} • else {k++;init();}
• else k--;
• } }
3.Problema colorării hărților
• void main()
• { printf("Dati numarul de tari:");
• scanf ("%d", &n);
• printf("Dati matricea:\n");
• for(int i=1;i<=n;i++)
• for(int j=1;j<=n;j++) scanf ("%d",&a[i][j]);
• bkt();
• _getch();
• }
4.Problema fotografiei
4.Problema fotografiei
Enunt (varianta a problemei colorarii hartilor):
O fotografie alb–negru este reprezentata sub
forma une matrice binare. Ea infatiseaza 1 sau mai
multe obiecte. Portiuni corespunzatoare obiectelor
se reprezinta in matrice prin valoarea 1, iar cele
corespunzatoare fundalului prin valoarea 0.
• Se cere sa se determine numarul de obiecte
nObiecte si sa se coloreze obiectele cu culori
diferite: 2,3,nObiecte+1.
4.Problema fotografiei
• Doua puncte in folografie care au valoarea 1 apartin aceluiasi obiect
daca ele sunt vecine pe linie sau coloana. Pentru rulare, fotografia alb-
negru este prezentata in fisierul “in.txt”, conform datelor de mai jos:
45
11011
00010
11011
10110
i = 2000 i=0
s2 = 0 s2 = 1 s2 = 0
pr = 300 pr = 0
s2 = 1