#coding=utf-8 # 鏁板瓧鍏ㄦ帓鍒?/span> # Chris Zheng 2007-06-05 import sys, os #寰呮帓鍒楃殑鏁板瓧 NUMS = [1,2,3,4,5,6] #緇撴灉闆嗗悎 results = [] EXCLUDES = ( lambda a,b,nums:abs(nums.index(a) - nums.index(b)) ==1, #a,b鏄惁鐩擱偦 lambda a,b,idx_a,idx_b,nums:nums.index(a) == idx_a and nums.index(b) \ == idx_b #a,b鏄惁鍚屾椂絎﹀悎鐗瑰畾浣嶇疆 ) # 3鍜?涓嶈兘鐩擱偦 褰?鍦ㄧ1鏃?涓嶈兘鍦ㄧ7 EXT_PARAMS = ( (3,4,NUMS),(2,6,1,7,NUMS) ) #媯鏌ユ帓闄ゆ潯浠?/span> def__check_conditions(nums): matchs = False for f in EXCLUDES: for params in EXT_PARAMS: try: params[-1] = nums matchs = f(*params) if matchs: return matchs except Exception:continue return matchs #鏍戣妭鐐?/span> class node(object): def__init__(self, n): self.value = n self.parent = None self.children = [] def__eq__(self,other): return self.value == other.value def__str__(self):return str(self.value) #涓繪柟娉?/span> def get_all(nums): trees = [] for n in nums: trees.append(create_tree(node(n))) for t in trees: walk_tree(t) global results #榪囨護鏉′歡 return (r for r in results ifnot__check_conditions(r)) #鐢熸垚緇撴灉鏍?nbsp; def create_tree(root): parent_elements =__parents(root) if len(parent_elements) == len(NUMS)+1:return root nums = (nums for nums in NUMS if node(nums) notin parent_elements) for k in nums: c = node(k) c.parent = root root.children.append(create_tree(c)) return root def__parents(node): parent_elements = [node] while node.parent: parent_elements.append(node.parent) node = node.parent return parent_elements #閬嶅巻緇撴灉鏍?/span> def walk_tree(root): if root.children: for n in root.children: walk_tree(n) else: k = [root.value] p = root.parent while p: k.append(p.value) p = p.parent k.reverse() results.append(k) #嫻嬭瘯杈撳嚭 if__name__=='__main__': rs = get_all(NUMS) f = open('results.txt','w') for k in rs: f.write(str(k)+'\n') f.close()