Informatică, întrebare adresată de emipet, 9 ani în urmă

Se dă o matrice pătratică cu n lini şi n coloane şi elemente numere naturale distincte. Determinaţi cea mai mare sumă a n elemente din matrice, cu proprietatea că oricare două elemente se află pe linii şi coloane distincte. (backtracking c++)


AntiEaglesDavids: tu ce ai incercat?

Răspunsuri la întrebare

Răspuns de AntiEaglesDavids
1
#include <bits/stdc++.h>
using namespace std;

constexpr unsigned NMax = 15;

int sol, n;
int v[NMax][NMax], x[NMax];
bool c[NMax], l[NMax];

void back(int k)
{
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++) {
            x[k] = v[i][j];

            if(!c[j] && !l[i]) {
                c[j] = l[i] = 1;
                if(k == n) sol = max(sol, accumulate(x + 1, x + n + 1, 0));
                else back(k + 1);
                c[j] = l[i] = 0;
            }
        }
}

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            cin >> v[i][j];
    back(1);
    cout << sol << '\n';
    return 0;
}


Alte întrebări interesante