数据结构_习题3.10 汉诺塔的非递归实现(非 主流解法)
创始人
2024-05-30 04:05:50
0
  • 题目地址
  • 题目分析:
  1. 本题目需要一定汉诺塔的前置知识,这里不提供;
  2. 分析递归代码
    void hanoi(int k,char a,char b,char c)
    {if(k==1) printf("%c ->%c",a,c);//1else{hanoi(k-1,a,c,b);//2printf("%c ->%c",a,c);//3hanoi(k-1,b,a,c);//3}//4
    }

    此处1 2 3 4与上述递归代码注释1 2 3 4等价,那我们用一个栈记录数据和状态即可。

  3. 具体实现
    #include
    #includetypedef 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,char a,char b,char c){stk[++i]=(fsp)malloc(sizeof(fsp));//栈顶上移stk[i]->k=k;//待处理数量stk[i]->a=a,stk[i]->b=b,stk[i]->c=c;//迁跃情况stk[i]->tag=(k==1?1:2);//所进入的状态
    }
    void popFsp(){free(&stk[i]);//注意释放栈空间i--;//出掉当前栈顶if(i!=-1) stk[i]->tag++;//新栈顶的状态改变
    }int main()
    {int n;scanf("%d",&n);pushFsp(n,'a','b','c');while (i>=0){if(stk[i]->tag==1)//出口:出到3或4{printf("%c -> %c\n",stk[i]->a,stk[i]->c);popFsp();} else if(stk[i]->tag==2)//入口:入到1或2{pushFsp(stk[i]->k-1,stk[i]->a,stk[i]->c,stk[i]->b);}else if(stk[i]->tag==3)//入口:入到1或2{printf("%c -> %c\n",stk[i]->a,stk[i]->c);pushFsp(stk[i]->k-1,stk[i]->b,stk[i]->a,stk[i]->c);}else if(stk[i]->tag==4)//出口:出到3或4{popFsp();}}return 0;
    }
  4. 我的这种方法分析过于细致(粗暴),理解起来有难度,这里推荐盖世馒头的理解方式,即在2和3进入下一次调用时,将该1句话扩写成“4句话”,不停扩写,再依次执行即可。

相关内容

热门资讯

我来教大家“掼蛋大师辅助器ap... 亲,掼蛋大师这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,掼蛋大师的开挂软件,名...
我来教大家“开心联盟辅助器ap... 您好,开心联盟这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
我来教大家“友愉棋牌辅助器ap... 您好,友愉棋牌这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
我来教大家“全盛棋牌辅助器ap... 亲,全盛棋牌这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,全盛棋牌的开挂软件,名...
我来教大家“情怀三三麻将辅助器... 我来教大家“情怀三三麻将辅助器app官方下载最新版本更新”详细分享开挂一、情怀三三麻将AI软件牌型概...
我来教大家“无锡好运麻将辅助器... 亲,无锡好运麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,无锡好运麻将的开挂...
我来教大家“推筒子辅助器app... 您好,推筒子这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打牌...
我来教大家“比奇堡辅助器app... 我来教大家“比奇堡辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方神...
我来教大家“新兴茶苑辅助器ap... 我来教大家“新兴茶苑辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方...
我来教大家“欢乐互动辅助器ap... 我来教大家“欢乐互动辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方...
我来教大家“东方互娱辅助器ap... 亲,东方互娱这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,东方互娱的开挂软件,名...
我来教大家“天天乐清麻将辅助器... 我来教大家“天天乐清麻将辅助器app官方下载最新版本更新”详细分享开挂一、天天乐清麻将AI软件牌型概...
我来教大家“唐三彩辅助器app... 我来教大家“唐三彩辅助器app官方下载最新版本更新”详细分享开挂一、唐三彩AI软件牌型概率发牌机制”...
我来教大家“Y0辅助器app官... 我来教大家“Y0辅助器app官方下载最新版本更新”详细分享开挂一、Y0AI软件牌型概率发牌机制”必胜...
我来教大家“天天互娱辅助器ap... 亲,天天互娱这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,天天互娱的开挂软件,名...
我来教大家“悟空竞技麻将辅助器... 亲,悟空竞技麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,悟空竞技麻将的开挂...
我来教大家“情怀开化麻将辅助器... 我来教大家“情怀开化麻将辅助器app官方下载最新版本更新”详细分享开挂一、情怀开化麻将AI软件牌型概...
我来教大家“龙炎互娱辅助器ap... 我来教大家“龙炎互娱辅助器app官方下载最新版本更新”详细分享开挂一、龙炎互娱AI软件牌型概率发牌机...
我来教大家“闲逸碰胡辅助器ap... 亲,闲逸碰胡这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,闲逸碰胡的开挂软件,名...
我来教大家“友聚麻将辅助器ap... 我来教大家“友聚麻将辅助器app官方下载最新版本更新”详细分享开挂一、友聚麻将AI软件牌型概率发牌机...