2011-11-16 6 views
0

Je suis en train de calculer le poids maximal dans un tas avec cette fonction:poids Maximal dans un tas

unsigned int left(unsigned int x) 
{return 2*x+1;} 

unsigned int right(unsigned int x) 
{return 2*x+2;} 

unsigned int max_way (unsigned int* feld, int x, int max_size) 
{ 
    if (x > max_size) 
     return 0; 
    else 
     return feld[x] + std::max(max_way(feld, left(x), max_size), max_way(feld, right(x), max_size)); 
} 

Je l'essayer avec un petit exemple:

unsigned int feld[] = {3,7,4,2,4,6,8,5,9,3}; 

std::cout << max_way(feld, 0, 10); 

Le résultat est 134514494. C'est un peu gros!

Des idées?

+0

Cela ne ressemble pas tas que j'ai jamais entendu parler. Est-ce que le résultat escompté 21? Parce que l'émulation dans ma tête donne 21. –

+0

Regardé comme un tas pour moi. Voilà comment j'ai répondu à sa question. Un tas est une structure qui a la propriété de tas: si B est un nœud enfant de A, alors touche (A) ≥ touche (B). Ici, la clé est l'index. – drdwilcox

Répondre

4
if (x > max_size) 

devrait être

if (x >= max_size) 

C++ tableaux vont de 0 .. max-1.

0

Vous pouvez essayer Whit

if(x >= max_size)