- 题目地址
- 题目分析:
- 本题目需要一定汉诺塔的前置知识,这里不提供;
- 分析递归代码
void hanoi(int k,char a,char b,char c) { if(k==1) printf("%c ->%c",a,c);//1 else { hanoi(k-1,a,c,b);//2 printf("%c ->%c",a,c);//3 hanoi(k-1,b,a,c);//3 }//4 }
此处1 2 3 4与上述递归代码注释1 2 3 4等价,那我们用一个栈记录数据和状态即可。
- 具体实现
#include<stdio.h> #include<stdlib.h> typedef struct funState{ int k;//待处理数量 char a,b,c;//a是起始柱,b是辅助,c是目标柱子 int tag;//见状态分析 }fs; typedef fs *fsp; int i=-1;//每个i指向存数据的位置,-1为空栈 fsp stk[16];//栈的初始化 void pushFsp(int k