Hanoi塔(分治法的应用)

1.分治法

分治法的设计思想是将一个难以直接解决的大问题分解成一些规模较小的相同问题,以便各个击破,分而治之。

一般来说,分治算法在每一层递归上都有3个步骤:

(1)分解:将问题分解成一系列子问题。

(2)求解:递归地求解各子问题。若子问题足够小,则直接求解。

(3)合并:将子问题的解合并成原问题的解。

2.Hanoi塔

分治法的典型应用:

当只有一个盘子时,直接从A移到C即可;

如果已知n-1个盘子的移动方案,那么n个盘子的移动方案如下:

先把前n-1个盘子从A借助C移动到B,再把第n个盘子从A直接移到C,然后再将B处的n-1个盘子从B处借助A移动到C处。至此就完成全部盘子的移动。

void Hanoi(int n,char a,char b,char c) //将n个盘子从a通过b移动到c

{

  if(n>1){

     Hanoi(n-1,a,c,b);//先将前n-1个盘子从a处通过b移动到b

     move(n,a,c);//将第n个盘子从a处直接移动到c

     Hanoi(n-1,b,a,c);//再将前n-1个盘子从了b处通过a移动到c

  }else{

     move(n,a,c);//只有一个盘子时,直接从a移动到c。递归出口

  }

}

你可能感兴趣的:(分治法)