import sys
def backtracking(target,loc,tem,ans,set1):
if len(tem)==len(target):
s=''.join(tem)
ans.append(s)
for i in range(len(target)):
if target[i] in set1:
tem.append(target[i])
set1.discard(target[i])
backtracking(target,i+1,tem,ans,set1)
set1.add(target[i])
tem.pop()
if __name__=='__main__':
for line in sys.stdin:
target=list(line.strip())
tem=[]
ans=[]
set1=set(target)
backtracking(target,0,tem,ans,set1)
ans=sorted(ans)
for elem in ans:
print(elem)
回溯算法遍历“叶子节点”,相邻层之间通过哈希表进行剪枝,压栈前和弹栈后进行维护哈希表



京公网安备 11010502036488号