2011-11-16 38 views
0

我試圖計算的最大重量在使用此功能堆:最大重量

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)); 
} 

所以我嘗試用一​​個小例子:

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

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

結果134514494.這有點大!

任何想法?

+0

這看起來並不像我所聽過的任何堆。預期的結果是21?因爲在我的頭上模仿給出21. –

+0

看起來像一堆給我。我就是這樣回答他的問題的。堆是具有堆屬性的任何結構:如果B是A的子節點,則鍵(A)≥鍵(B)。這裏的關鍵是索引。 – drdwilcox

回答

4
if (x > max_size) 

應該是

if (x >= max_size) 

C++陣列從0 .. MAX-1。

0

你可以嘗試絲毫

if(x >= max_size)