简单的汉诺塔问题解法代码

以前学东西不扎实,现在捡捡也好,汉诺塔本是C语言开门就学的东西,不过上课那会儿真心听不懂,直到大二了,才明白那是咋回事,我感觉的编程,真的是一张窗户纸,不过捅破要花时间理解吸收。

题目描述:有一个塔,塔内有A,B,C三个柱子。起初,A柱上有n个盘子,依次由大到小、从下往上堆放,要求将它们全部移到C柱上;在移动过程中可以利用B柱,但每次只能移到一个盘子,且必须使三个柱子上始终保持大盘在下,小盘在上的状态。要求编程输出移动的步骤。

代码如下:


代码如下:

#include<stdio.h>
int move(char one,char two)//这个函数就是为了输出的结果直观显示出来,比如只有一个盘子时,输出a-->c. 就这样,把移动n个盘子每个步骤显示出来
{
    printf("%c --> %c\n",one,two);
}

int hanoi(int n,char one,char two,char three)//是核心函数了
{
    int move(char one,char two);
    if(n==1)//当只有一个盘子时,直接从a柱移到c柱就好,也是递归程序的一个出口
      move(one,three);
    else{   //盘子大于一时
        hanoi(n-1,one,three,two);//先借助c柱把上面的n-1个盘子从a柱全部移动到b柱
        move(one,three);           //这时a柱只剩下一个盘子了,移动到c柱即可
        hanoi(n-1,two,one,three);//将b柱剩下的n-1个盘子借助a柱移动到c柱,任务也就完成了
    }
}
int main()
{
    int n;
    char a,b,c;
    while(scanf("%d",&n)!=EOF)//可以输入多组数据检验结果
       hanoi(n,'a','b','c');
    }

(0)

相关推荐

  • VC++实现模拟汉诺塔效果

    先上效果图 再附上源代码: 汉诺塔: 复制代码 代码如下: #include "stdio.h" #include "math.h" int arrA[15], arrB[15], arrC[15];   // 分别为A.B.C int length; int lenA, lenB, lenC; char plate[32]; // Make void makeplate(int n) {     int i;     if (n == length + 1)   

  • C++实现汉诺塔算法经典实例

    本文所述为汉诺塔算法的C++代码的经典实现方法. 汉诺塔问题描述:3个柱为a.b.c,圆盘最初在a柱,借助b柱移到c柱.需要你指定圆盘数. 具体实现代码如下: #include <iostream> using namespace std; int times = 0; //全局变量,搬动次数 //第n个圆盘从x柱搬到z柱 void move(int n, char x, char z) { cout << "第" << ++times <&l

  • java数据结构和算法学习之汉诺塔示例

    复制代码 代码如下: package com.tiantian.algorithms;/** *    _|_1              |                | *   __|__2             |                | *  ___|___3            |                |            (1).把A上的4个木块移动到C上. * ____|____4           |                | *    

  • c#汉诺塔的递归算法与解析

    从左到右 A  B  C 柱 大盘子在下, 小盘子在上, 借助B柱将所有盘子从A柱移动到C柱, 期间只有一个原则: 大盘子只能在小盘子的下面. 如果有3个盘子, 大中小号, 越小的越在上面, 从上面给盘子按顺序编号 1(小),2(中),3(大), 后面的原理解析引用这里的编号. 小时候玩过这个游戏, 基本上玩到第7个,第8个就很没有耐心玩了,并且操作的动作都几乎相同觉得无聊.  后来学习编程, 认识到递归, 用递归解决汉诺塔的算法也是我除了简单的排序算法后学习到的第一种算法. 至于递归,简单来说

  • java求解汉诺塔问题示例

    思路如下: 要实现3阶汉诺塔的求解步骤,也就是说初始状态时,A上从上到下有三个盘子,分别为1号盘.2号盘和3号盘,其中1号盘最小,3号盘最大:判断剩余盘子个数,如果只有一个盘子就退出迭代,如果有大于一个盘子就继续迭代.代码如下: 复制代码 代码如下: public class HanoiTower {    public static void moveDish(int level, char from, char inter, char to) {        if (level == 1)

  • c#实现汉诺塔问题示例

    汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.下面是c#实现汉诺塔示例 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace 汉诺塔{    class Program    {        static void hanoi(char A, char B, char C, int count)        {     

  • c语言 汉诺塔算法代码

    复制代码 代码如下: #include<stdio.h> void move(char a,char b) {     printf("%c->%c\n",a,b); } void han(int n,char a,char b,char c) {     if(n>0)     {         han(n-1,a,c,b);         move(a,b);         han(n-1,c,b,a);     } } int main() {   

  • python益智游戏计算汉诺塔问题示例

    汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 复制代码 代码如下: times = 0def test(num,a,b,c):    globaltimes    ifnum==1:       print (a,b)       times+=1 else

  • Go语言实现汉诺塔算法

    hano.go package main import ( "bufio" "fmt" "os" "strconv" ) func main() { fmt.Print("输入要移动的盘子数:") reader := bufio.NewReader(os.Stdin) lool: data, _, _ := reader.ReadLine() n, err := strconv.Atoi(string(da

  • C语言实现汉诺塔游戏

    操作就是:A B 号码A的塔顶一层放在号码B的塔顶.如1(空格) 3 回车. 话说有人能把我这C的代码添加到QT界面框架上去么?  代码写的不好 ,维护性不够,只能玩8层的,写完以后发现很难拓展,软件工程,设计模式有待提高.... 里面提示输入等级的装B用了,没有实现,大家随便输入个个位数就可以玩了. stackfunc.c #include"STACK.h" #include<stdio.h> extern ceng CENG[SIZE]; //数据入栈 void pus

  • java 汉诺塔Hanoi递归、非递归(仿系统递归)和非递归规律 实现代码

    程序如下: 复制代码 代码如下: View Code  /*  * Hanoi塔游戏 问题描述:  * 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.  * 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照  * 大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小  * 顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在  * 三根柱子之间一次只能移动一个圆盘.  *   * fuction:实现 hanoi塔  *       

  • 使用python实现递归版汉诺塔示例(汉诺塔递归算法)

    利用python实现的汉诺塔.带有图形演示 复制代码 代码如下: from time import sleep def disp_sym(num, sym):        print(sym*num, end='') #recusiondef hanoi(a, b, c, n, tray_num): if n == 1:  move_tray(a, c)  disp(tray_num)  sleep(0.7) else:  hanoi(a, c, b, n-1, tray_num)  move

随机推荐