Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int v[6], n, m; // avem nevoie de ce-l mult 5 elemte in stiva
- FILE *g; // variabila de tip Fiser
- void Init(int k) {
- v[k] = 0; // initiailzm elemtenul cu 0
- }
- int Succesor(int k) {
- if (v[k] < n) { // verificam daca mai avem succsoer si daca este incrementam
- v[k]++;
- return 1;
- }
- return 0;
- }
- int Solution(int k) {
- return (k == m / 2); // ne trebuie doar m / 2 elemente pe restul le vom gnera pe baza acestora
- }
- void Print() {
- int i, j;
- if (m % 2) // daca m este impar
- for (j = 1; j <= n; j++) { // afisam elementele din stiva de n ori cu valori de din intervaul [1,n]
- for (i = 1; i <= m / 2; i++) //afisam elementee din stiva
- fprintf(g, "%d ", v[i]);
- fprintf(g, "%d ", j); // afisam a x valoare din milojc deoarece orice cmbinate care are numar impar de cifre admite n soluti de acesi forma
- for (i = m / 2; i >= 1; i--) // afisem elementele din vector in ordine inversa si asa ceam palindrom pentru m impar
- fprintf(g, "%d ", v[i]);
- fprintf(g, "\n"); // lasam un rand nou
- }
- else { // daca m ese par atunci afisam
- for (i = 1; i <= m / 2; i++) // elemntele generate din stiva
- fprintf(g, "%d ", v[i]);
- for (i = m / 2; i >= 1; i--) // elemntele generate in ordine inversa
- fprintf(g, "%d ", v[i]);
- }
- fprintf(g, "\n"); // rand nou
- }
- void Back() { // forma de back pentru generarea tuturor solutilor
- int k = 1;
- Init(k);
- while (k > 0) {
- if (k <= m / 2)
- if (Succesor(k))// daca exista succesor
- if (Solution(k)) // vedem daca este soltuie
- Print();
- else {
- k++; // incrementam k
- Init(k); // initializam nou merbu din stiva
- }
- else k--; // altfel decrementam k
- }
- }
- int main() {
- FILE *f; // variabila de tip fiser
- f = fopen("in.txt", "r");// deschidem pe f in mod citire
- fscanf(f, "%d%d", &n, &m); // citim n si m din fiser
- g = fopen("out.txt", "w"); // deschidem pe g in mod scriere
- fclose(f); // nu ne mai trebuie f i-l inchdem
- Back(); // apelam functia de back
- fclose(g);// inchidem si pe g
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement