用c++實現了漢諾塔,使用了遞迴,使用了上一次實現的堆疊這個資料結構來實現的漢諾塔,下面是**:
stack.h
//
// main.cpp
// stackdemo
//// created by xin wang on 4/15/15.
//#include class outofbounds//刪除定義的陣列
bool isempty()const //判斷是否為空
bool isfull() const//判斷是否是滿
t top()const;
void output();//輸出堆疊裡的元素
stack& add(const t& x);//忘堆疊裡面新增元素
stack& delete(t& x);//從堆疊裡面刪除元素
private:
int top;
int maxtop;
t *stack;
};//建構函式
template stack::stack(int maxsize)
//返回棧頂元素
templatet stack::top()const
else
}//輸出元素
template void stack::output()else
}//將棧頂裡面的元素刪除
template stack& stack::delete(t& x)
x=stack[top--];
return *this;
}
main.cpp
//
// main.cpp
//解決漢諾塔乙個非常優雅的方法是使用遞迴,為了吧最大的碟子移動到塔二
//需要借助塔三的幫助,先把n-1個碟子移動到塔三上,然後把最大的碟子移動到塔二,
//此時塔二上面,有了乙個最大的碟子,然後為了把塔三上面的碟子移動到塔二,這樣,可以借助塔一的幫助。
//實現用了上次實現的堆疊。所以引入了stack.h
// created by xin wang on 4/15/15.
//#include "stack.h"
stack*sta[4];//建立乙個陣列,裡面含有4個堆疊,我們需要3個堆疊來模擬3個塔
void towersofhanoi(int n,int x,int y,int z)
towersofhanoi(n, 1, 2, 3);//呼叫方法
}int main(int argc, const char * argv)
C 遞迴實現漢諾塔
a為存放盤子的塔,b為目標塔,c為輔助塔 演算法分為三步 一 將a上n 1個盤子全部放到c塔上 二 將a上剩下的乙個盤子放到b塔上 三 將c塔上的盤子全部放到b塔上 注 不需要考慮如何移動n 1個盤子 遞迴過程 首先,將a上n 1個盤子放到c上,然後將a上剩下的乙個盤子放到b上,然後可以看成a為輔助...
C 漢諾塔遞迴實現
程式背景 漢諾塔 tower of hanoi 又稱河內塔,問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之...
python 漢諾塔 Python漢諾塔
import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...