Dobrý den,potřeboval bych poradit s program pro nalezení minimálního počtu uzlů ve stromě. Program "hrubou" silou mám, ale ještě mi chybí program pomocí dynamického programování. Můžete mi prosím poradit?Program hrubou silou: (Visual Studio 2013)
#include "stdafx.h"
#include <iostream>
#include <algorithm>
using namespace std;
int opakovani = 0;
int image[4][4] = {
{ 1, 1 ,1 ,1 },
{ 0,0, 0 ,1 },
{ 0, 0, 0 ,1 },
{ 1, 1 ,1 ,1 },
};
int deleni(int x1, int x2, int y1, int y2);
int main()
{
int vysl = deleni(0,3, 0,3);
cout <<"Nejmensi pocet uzlu je: "<< vysl << endl;
cout << opakovani;
cin.get();
cin.get();
return 0;
}
int deleni(int x1, int x2, int y1, int y2) {
bool black = false;
bool white = false;
for (int i = x1; i <= x2; i++) {
for (int j = y1; j <= y2; j++) {
if (image[i][j] == 0)
{
white = true;
}
if (image[i][j] == 1)
{
black = true;
}
}
}
if (!(black & white)) { opakovani++; return 1; }
// TADY BYCH DAL TEST, JESTLI VÝSLEDEK S PARAMETRY int x1, int x2, int y1, int y2 UŽ JE V SEZNAMU, POKUD ANO, TAK HO ROVNOU VRÁTÍM
int vysledek = 2 * (x2 - x1 + 1) * (y2 - y1 + 1) - 1;
for (int i = y1; i < y2; i++) {
vysledek = min(vysledek, deleni(x1, x2, y1, i) + deleni(x1, x2, i + 1, y2) + 1);
}
for (int i = x1; i < x2; i++) {
vysledek = min(vysledek, deleni(x1, i, y1, y2) + deleni(i + 1, x2, x1, y2) + 1);
}
// TADY BYCH ULOŽIL DO SEZNAMU REŠENÍ S PARAMETRY int x1, int x2, int y1, int y2
opakovani++;
return vysledek;
}