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
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;
}
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
Biologie,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă