如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
杭电ACMSteps解题报告#include<iostream>usingnamespacestd;intp[70];intbiaoji[4];intnum;intcheck(intm,intpos,intNow){if(m==0)returntrue;if(p[m]==pos||p[m]==Now){memset(biaoji,0,sizeof(biaoji));biaoji[pos]=1;biaoji[Now]=1;inti;for(i=1;i<=3;i++){if(!biaoji[i])break;}check(m-1,i,p[m]);}elsereturnfalse;}voidslove(intn){intflag=1;if(!check(n,3,1))flag=0;if(!flag)printf("false\n");elseprintf("true\n");}intmain(){inttest;scanf("%d",&test);while(test--){inti,j,n,temp;scanf("%d",&n);memset(p,0,sizeof(p));for(i=1;i<=3;i++){scanf("%d",&num);for(j=0;j<num;j++){scanf("%d",&temp);p[temp]=i;}}slove(n);}return0;}这是一个汉诺塔问题,要求将A柱上的n个盘子原样移动到C盘,每次只能移动一个盘子,且盘子可以插在A,B,C任意一个盘子上。且任何时刻都不能将较大的盘子压在较小的盘子上。那么如何实现移动圆盘的操作呢?我们可以用递归函数求解,在执行函数时,多次进行自我调用。再断实际移动与输入相比是否正确,如是就返回ture,否则返回false。