zoukankan      html  css  js  c++  java
  • dfs--汉诺塔

    在研究汉诺塔问题时,我们可以先分析俩个盘子的方法:

      1.把第一个盘子放到辅助柱子上

      2.把第二个盘子放大目标柱子上

      3.把第一个盘子从辅助柱子移到目标柱子上

    由此我们可以通过整体思想推导出一共有n个盘子情况:

      把n-1个盘子看作是一个整体,我们只需要参照2个盘子的方法,把n-1个盘子先发到辅助柱子上,把第n个盘子放到目标柱子上,最后把n-1个盘子从辅助柱子移到目标柱子上。

    过程代码如下;

     1 void dfs(int x,char a1,char b1,char c1)
     2 {
     3     if (x==1)
     4     {
     5         cout<<a1<<"->"<<x<<"->"<<c1<<endl;
     6         return;
     7     }
     8     dfs(x-1,a1,c1,b1);
     9     cout<<a1<<"->"<<x<<"->"<<c1<<endl;
    10     dfs(x-1,b1,a1,c1);
    11     return;
    12 }

    完整代码:

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <vector>
     4 #include <algorithm>
     5 #include <cstring>
     6 using namespace std;
     7 int n;
     8 char a,b,c;
     9 void dfs(int x,char a1,char b1,char c1)
    10 {
    11     if (x==1)
    12     {
    13         cout<<a1<<"->"<<x<<"->"<<c1<<endl;
    14         return;
    15     }
    16     dfs(x-1,a1,c1,b1);
    17     cout<<a1<<"->"<<x<<"->"<<c1<<endl;
    18     dfs(x-1,b1,a1,c1);
    19     return;
    20 }
    21 int main()
    22 {
    23     scanf ("%d %c %c %c",&n,&a,&b,&c);
    24     dfs(n,a,c,b);
    25     return 0;
    26 }
  • 相关阅读:
    iOS 饼状图
    objective-c 中随机数的用法 (3种:arc4random() 、random()、CCRANDOM_0_1() )
    倒计时获取验证码、事件代码
    iOS 技能集结号
    自定义控件:半透明控件
    c# string
    软考题
    php简单实例
    .net 线程池的简单应用
    c# 堆栈四则运算
  • 原文地址:https://www.cnblogs.com/very-beginning/p/12104178.html
Copyright © 2011-2022 走看看