2016-07-24 2 views
1
private static Stack<Integer> temp = new Stack<Integer>(); 

public void populateSubset(int[] DATA, int fromIndex, int endIndex, int target) { 

    if (sumInStack == target) { 
     check = true ; 
     Counter ++ ; 
     print(stack, target); 
    } 


    for (int currentIndex = fromIndex; currentIndex < endIndex; currentIndex++) { 

     if (sumInStack + DATA[currentIndex] <= target) { 
      stack.push(DATA[currentIndex]); 
      sumInStack += DATA[currentIndex]; 
      if (sumInStack >= MaxSumInStack){ 
        temp = stack;  
        MaxSumInStack = sumInStack; 

      } 

      populateSubset(DATA, currentIndex + 1, endIndex, target); 
      sumInStack -= (Integer) stack.pop(); 

     } 
    } 
} 

JavaのsubsetSumアルゴリズムでは、アルゴリズムは、正確な合計を持つサブセットを見つけることができません。 私はsumInsStackを更新するたびに、スタックと最大合計を見つけるための合計を格納します。しかし最終的には、各ステップで価値が得られるものの、一時スタックはnullであり、何もありません。私は何をすべきか? P.S:すべてのスタックを最大値で印刷したいと思っています。アルゴリズムがスタックを使用して正確な合計を持つサブセットを見つけなかった場合、ターゲットに最も近い値を持つサブセットを見つける

+0

? – Eran

+0

@Eran before temp – Elnaz91

答えて

1

temp = stack; 

によってあなたはStackのコピーを作成する場合、それはあなたがやっていることはありません。 temp変数はstack変数と同じStackを参照するだけですので、後でstackを空にすると、tempも空になります。

コピーを作成するためには、明示的tempスタックに元のスタックの要素をコピーする必要があります: `宣言stack`さ

temp = new Stack<Integer>(); 
temp.addAll(stack); 
+0

ありがとうございます;) – Elnaz91

関連する問題