编程之美--游戏之乐--1.3一摞烙饼的排序

话不多说
直接上代码

#coding=utf-8
#author="HL"


class Node():
    def __init__(self,cakes,level,steps):
        self.cakes = cakes
        self.level = level
        self.steps = steps

class Solution():
    def __init__(self,nums):
        self.toplevel = 2*len(nums)-1
        self.stack = [Node(nums,0,[])]

    def isSorted(self,nums):
        for i in range(len(nums)-1):
            if nums[i]>nums[i+1]:
                return False
        return True
'''
最小步骤预测
'''
    def low_predict(self, cakes):
        number = 0
        for i in range(len(cakes) - 1):
            if abs(cakes[i] - cakes[i + 1])!=1:
                number += 1
        return number

'''
解决方案
'''
    def solve(self):
        while self.stack:

            first = self.stack.pop()
            cakes = first.cakes
            if self.isSorted(cakes):
                print "翻转次数为:%d"%first.level,"翻转步骤为:",first.steps
                if first.level<self.toplevel:
                    self.toplevel = first.level
            else:
                low_level = self.low_predict(cakes)
                if first.level+low_level<self.toplevel:
                    for i in range(1,len(cakes)):
                        left = cakes[:i+1]
                        right = cakes[i+1:]
                        nowcakes = left[::-1]+right
                        if not first.steps or first.steps[-1]!=i:
                            newnode = Node(nowcakes,first.level+1,first.steps+[i])
                            self.stack.append(newnode)







'''
程序调用
'''
zz = Solution([3,2,1,6,5,4,9,8,7,0])
print zz.solve()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值