Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- int v[20], a[20], i, n, k, m = 0, p;
- void Init(int k) { // k este vârful stivei
- v[k] = 0;
- //initializeaz valoarea din vârful stivei
- }
- int Succesor(int k) {
- if (v[k] < n) { // se poate creste valoarea din vârf
- v[k]++; // se incrementeaz valoarea din vârf
- return 1; // functia a avut succes
- }
- else
- // nu se poate creste valoarea din vârf
- return 0;
- }
- int rezolvare(int k) {
- int r;
- if (k < 2)
- return 0;
- r = a[v[k]] - a[v[k - 1]];
- if (r <= 0)
- return 0;
- for (i = 1; i < k; i++)
- if ((a[v[i + 1]] - a[v[i]]) != r)
- return 0;
- return 1;
- }
- int Valid(int k) {
- int i;
- for (i = 1; i < k; i++)
- if (v[i] == v[k] ) return 0;
- for (i = 1; i < v[k]; i++)
- if (a[i] == a[v[k]]) return 0;
- return 1;
- }
- int Solution(int k) {
- return (k == n);
- }
- void Print(int k) {
- printf("%d : ", ++m);
- for (i = 1; i <= k; i++)
- printf("%d ", a[v[i]]);
- printf("\n");
- }
- void Back(int k) {
- // B. recursiv
- Init(k);
- while (Succesor(k)) {
- if (Valid(k)) {
- if (rezolvare(k))
- Print(k);
- if (Solution(k));
- else Back(k + 1);
- }
- }
- }
- int main(void) {
- //printf("Dati n: ");
- FILE *f;
- f = fopen("in.txt", "r");
- fscanf(f, "%d", &n);
- for (i = 1; i <= n; i++)
- fscanf(f, "%d", &a[i]);
- Back(1);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment