请教高人有关算法的问题!

来源:百度知道 编辑:UC知道 时间:2024/05/03 17:36:54
题目一:利用分治法完成合并排序。
题目二:解决4个盘子的汉诺塔问题。要求输出每一步的操作。
这是老师布置的作业,不会.
希望有源代码和结果分析,解决问题另有重谢!

分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的解这些子问题,然后将个子问题的解合并得到原问题的解。
分治法的基本步骤:
divide-and-conquer(P)
{
if ( | P | <= n0) adhoc(P); //解决小规模的问题
divide P into smaller subinstances P1,P2,...,Pk;//分解问题
for (i=1,i<=k,i++)
yi=divide-and-conquer(Pi); //递归的解各子问题
return merge(y1,...,yk); //将各子问题的解合并为原问题的解
}
#include <stdio.h>

//--------------------------------------------------------
// 打印搬运动作
//--------------------------------------------------------
int MoveIt(int x,int Source,int Target)
{
printf("Move %d From %d to %d\n",x,Source,Target);
return 0;
}

//--------------------------------------------------------
// 用 4 根柱子移动盘子
// n 是盘子个数,编号从1 到 n
// First 是源柱子号
// Second Th