/// <summary> /// 组合 /// </summary> /// <param name="curItem">当前项</param> /// <param name="itemIndex">项索引</param> private void ToCombination() { while (_stk.Count > 0) { CombinationItem <T> item = _stk.Pop(); ICombinationState curSender = item.Sender; if (curSender.DoBuy(item.Item)) { item.TotlePoint += item.Item.GetPoint(); if (curSender.LeftMoney == 0) { _queItems.Enqueue(item); } else { for (int i = item.ItemIndex; i < _lstItems.Count; i++) { ICombinationState newSender = curSender.CopyCombination(); CombinationItem <T> newitem = new CombinationItem <T>(_lstItems[i], i, newSender, item); _stk.Push(newitem); } } } } }
/// <summary> /// 开始组合 /// </summary> private void DoCombination(ICombinationState sender) { _queItems = new Queue <CombinationItem <T> >(); _stk = new Stack <CombinationItem <T> >(); for (int i = 0; i < _lstItems.Count; i++) { ICombinationState curSender = sender.CopyCombination(); CombinationItem <T> item = new CombinationItem <T>(_lstItems[i], i, curSender, null); _stk.Push(item); } ToCombination(); }