代码示例
# Hanoi Tower Algorithm
# param:src(str), tar(str), n(int)
# src, tar, : "a", b", "c"
def hanoi(src, tar, n):
# target value
if n == 0:
return
# check the temp
if (src == "a" and tar == "b") or (src == "b" and tar == "a"):
tmp = "c"
if (src == "b" and tar == "c") or (src == "c" and tar == "b"):
tmp = "a"
if (src == "a" and tar == "c") or (src == "c" and tar == "a"):
tmp = "b"
# move n-1 from src to tmp
hanoi(src, tmp, n-1)
# move the n from src to tar
print("move %d from %s to %s" % (n , src, tar))
# move n-1 from tmp to tar
hanoi(tmp, tar, n-1)
hanoi("a","c",4)
运行效果
move 1 from a to b
move 2 from a to c
move 1 from b to c
move 3 from a to b
move 1 from c to a
move 2 from c to b
move 1 from a to b
move 4 from a to c
move 1 from b to c
move 2 from b to a
move 1 from c to a
move 3 from b to c
move 1 from a to b
move 2 from a to c
move 1 from b to c
总结
1、算法第一步还是先设置好边界条件target value;
2、算法第二步找好中间柱;
3、算法第三步比较关键,就是抽象出n-1堆,从源头到中间柱;
4、算法第四步比较简单,第n个想都不用想,从源头到目标柱,感觉这个像是一个里程碑;
5、算法第五步还是把抽象的n-1堆,从中间柱到目标柱;