iT邦幫忙

DAY 21
0

重頭打基礎-C/C++系列 第 21

重頭打基礎-C/C (Day21:漢諾塔、河內塔)

  • 分享至 

  • xImage
  •  

/*
*目前應該改名叫"重頭打基礎-資料結構"了XDD
*/

問題:

有三個圓柱A、B、C
其中A圓柱上有3個圓片
圓片大小都不一,小的要放在大的上面

請把三個圓片從A移到另一個圓柱上

概念:

用遞迴~

解法:

當有1個圓片:
A->C (把圓片直接移動到另一個圓柱)
當有2個圓片:
A->B(先把上面圓片移動到B)

A->C(把最下面圓片移動到C)

B->C(把剛剛移動到B的圓片移到C)
當有n個圓片:
把n-1個圓片由A移動到B
把最底下的圓片由A移動到C
把n-1個圓片由B移動到C

時間複雜度:

有n片移動次數為2^n-1

程式碼:

void move(int a,char x,char y,char z){//將n個盤子從x藉由y移到z

if(1 == a)

printf("move %c -> %c",x,z);

else{

move(a-1,x,z,y);

move(1,x,y,z);

move(a-1,y,x,z);

}

}


上一篇
重頭打基礎-C/C (Day20:遞迴)
下一篇
重頭打基礎-C/C (Day22:八皇后)
系列文
重頭打基礎-C/C++30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言