求C语言汉诺塔非递归算法

2024-11-17 04:31:19
推荐回答(3个)
回答(1):

n个盘子a[0]~a[n-1]
从A借助B 移动到C

首先判断n的奇偶性,
if n%2=1
for i=n-1 to 2 i-=3
if n-2>0
从A移动a[i-2]到C
从A移动a[i-1]到B,
从C移动a[i-2]到B,
endif
从A移动a[i]到C
if n-2>0
从B移动a[i-1]到A,
从B移动ai-1]到C,
从A移动a[i-2]到C,
endif
endfor
else//n为偶数,类似

endif

回答(2):

A,B,C三个塔,先把塔A上的N-1各盘子移到C,再把1个移到B,再把剩余的N-1移到A

回答(3):

void (int n,char one,char two,char three)
{
if(n==1)
move(one,three);
else {
hanoi(n-1,one,three,two);//n-1经three移到two
move(one,three);
hanoi(n-1,two,one,three);//n-1经one移到three
}
}