说来惭愧,汉诺塔问题在大一就知道,毕业了才知道。。。。。研究生考试复试的时候,还很巧问到这个问题。汉诺塔是一个非常经典的印度问题,大意就是将按顺序摆放的盘子在不改变顺序的前提下,利用一个中间棍子,放到第三个棍子上,B站上有非常详细的讲解。这个问题使用函数的递归就可以,说来很简单,当时理解真是麻烦。
//汉诺塔
void hanoi(int n,char A,char B,char C){
void move(char,char);
if(n == 1){
move('A','B');
}
else{
hanoi(n-1,'A','C','B');
move('A','C');
hanoi(n-1,'B','A','C');
}
}
void move(char start,char end){
printf("%c -> %c\n",start,end);
}