早教吧 育儿知识 作业答案 考试题库 百科 知识分享

汉诺塔,给你任意一种合法状态,你能计算出从当前到把所有的金片移动到第三个针上的最小步数?已有代码,看不懂,inthanio(inta,intb,intc,intn,int*result)//a,b,c分别代表3根针,n是金片数{if(n==1){if

题目详情
汉诺塔,给你任意一种合法状态,你能计算出从当前到把所有的金片移动到第三个针上的最小步数?
已有代码,看不懂,
int hanio(int a,int b,int c,int n,int *result) //a,b,c 分别代表3根针,n是金片数
{
if(n==1)
{
if(result[n-1]==c) return 0;
else return 1;
}
else if(result[n-1]==c) return hanio(a,b,c,n-1,result);
else if(result[n-1]==a) return hanio(a,c,b,n-1,result)+(1r[j];
cout
▼优质解答
答案和解析
int hanio(int a,int b,int c,int n,int *result) //a,b,c 分别代表3根针,n是金片数
//result是个长度为n的数组,第一位表示最小的金片,第二位表示次小的金片,...最后一位表示最大的数组.
//数组每个位上的值为a或b或c,表示该金片在哪个针上.显然,对于确定的result只有一种合法状态
{
if(n==1)
{
if(result[n-1]==c) return 0;
else return 1;
} //如果只有一个金片,平凡情况
else if(result[n-1]==c) return hanio(a,b,c,n-1,result);
//如果最大的金片在C针即第三根针上,该金片不动,问题转化为将n-1个金片移到C针上
else if(result[n-1]==a) return hanio(a,c,b,n-1,result)+(1r[j];//这里要防止r溢出
cout