Informatică, întrebare adresată de larea99, 8 ani în urmă

Cine poate face astazi problema dau 100p + coronita e vorba de backtraking.

Anexe:

larea99: Scrieți codul pe pastebin și atât. sau o poză merge orice.

Răspunsuri la întrebare

Răspuns de andrei750238
1

#include <iostream>

#include <fstream>

using namespace std;

int L, n;

int a[100]; //Vectorul cu repere

int v[100]; //Vectorul solutiei

void afis(int k){

   static int nr = 1;

   cout << "\nSolutia #" << nr++ << " : ";

   for(int i = 1; i <= k;i++) cout << v[i] << " ";

}

void backt(int lung, int k){

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

       v[k] = a[i];

       lung += a[i];

       if(lung == L) afis(k);

       else if (lung < L) backt(lung,k+1);

       lung -= a[i];

       }

}

int main()

{

   ifstream in("date.txt");

   in >> L >> n;

   for (int i=1;i<=n;i++) in >> a[i];

   backt(0,1);

}


andrei750238: Uite si pastebin : https://pastebin.com/yM3fNSTH
andrei750238: Nota :
static int nr = 1; poate fi inlocuit cu un simplu int nr = 1; in fata functiei. Tot ce face static e sa pastreze variabila respectiva la iesirea din functie.
larea99: Ma descurc la programare am probleme doar cu back ingeneral, faza e ca ma gandeam ca solutile de genul 1 1 2 sau 2 1 1 ca sunt acelasi si nu trebuie scrise de 2 ori
larea99: Mai am de facut conversa de la c++ la c totusi
andrei750238: Asta nu stiu, nu se precizeaza.
Daca e cazul, mai verifici (in afis - daca vrei; sau poti chiar si in backt ) ca numerele din vectorul v[] sa fie in ordine crescatoare. Astfel nu vei mai avea "dubluri"
Alte întrebări interesante