纯C | 解汉诺塔问题
汉诺塔问题
https://www.nowcoder.com/practice/7d6cab7d435048c4b05251bf44e9f185
纯c解汉诺塔问题,具体思路就是递归对汉诺塔进行处理,每次递归会有一片到达Z柱上,通过X柱和Y柱进行过渡处理。
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return string字符串一维数组 * @return int* returnSize 返回数组行数 */ //move函数用于记录当前移动的描述 //参数说明:char *x:从哪移动;char *y:移动到哪儿 void move(char *x,char *y,int *returnSize,char **returnArray) { //每次move的时候,对返回的二维字符类型数组申请空间,用于记录该移动描述字符串 returnArray[*returnSize]=(char*)malloc(sizeof(char)*100); //通过sprintf函数将字符串赋值到返回数组中 sprintf(returnArray[*returnSize],"move from %s to %s",x,y); //返回数组长度+1 *returnSize=*returnSize+1; } //hanoi函数用于递归处理汉诺塔 //参数说明:char *x:从哪儿移动;char *y:经过谁;char *z:移动到哪儿 void hanoi(int n,char *x,char *y,char *z,int *returnSize,char**returnArray) { //如果只有一片的时候,直接把它移动到z上 if(n==1) { move(x,z,returnSize,returnArray); } else { //将n-1片,从x经过z移动到y上 hanoi(n-1,x,z,y,returnSize,returnArray); //此后x上只剩一片,将其移动到z上 move(x,z,returnSize,returnArray); //然后对y上的n-1片递归进行操作 hanoi(n-1,y,x,z,returnSize,returnArray); } } //主函数 char** getSolution(int n, int* returnSize ) { // write code here //为返回的二维字符型数组申请空间 char** ret=(char**)malloc(sizeof(char*)*100000); //返回长度初始值为0 *returnSize=0; //对字符串赋值 char x[6]="left"; char y[6]="mid"; char z[6]="right"; hanoi(n,x,y,z,returnSize,ret); //返回ret数组 return ret; }