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 }
  • 相关阅读:
    第一册:lesson thirty five。
    第一册:lesson thirty three。
    第一册:lesson thirty one。
    C#比较两个对象是否为同一个对象。
    第一册:lesson twentynine..
    第一册:lesson twenty seven。
    C#函数返回值。
    说明
    推荐一些python Beautiful Soup学习网址
    祝各位节日快乐!20151111
  • 原文地址:https://www.cnblogs.com/very-beginning/p/12104178.html
Copyright © 2011-2022 走看看