首页 > 其他分享 >汉诺塔(C语言)

汉诺塔(C语言)

时间:2022-12-14 11:00:13浏览次数:60  
标签:柱子 圆盘 hanoi C语言 汉诺塔 盘子 移动

汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度​古老传说的益智玩具​。大梵天​创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门​把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

汉诺塔玩法:有三根柱子A B C,假设A柱子上有n个盘子:


  • 我们的思路是要把A柱子最底下的盘子(最大的那个盘子)先移动到C柱子上
  • 前提是要把A柱子除了最底下的那个盘子通过C柱子中转,移动到B柱子上(也就是要把n-1个盘子移动到B柱子上)
  • 最后再把A柱子上最底下的盘子移动到C柱子上

  • 然后通过A柱子中转把B柱子上n-1个盘子移动到C柱子上

有了这个思路代码就好写了:

#include <stdio.h>

void hanoi(int n, char A, char B, char C)
{
if (n == 1)
printf("%c-->%c\n", A, C);
else
{
hanoi(n - 1, A, C, B);//通过C柱子,把A柱子上的n-1个盘子移动到B柱子上
printf("%c-->%c\n", A, C);

hanoi(n - 1, B, A, C);//最后通过A柱子,把B柱子上的n-1个盘子移动到C柱子上

}

}

int main()
{
int n = 0;
printf("请输入汉诺塔层数:>");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
return 0;

}

下面是我自己做的思维导图(比较潦草),用3个盘子做例子比较好理解

移动盘子次数为:2^n -1

步骤为:A->C  A->B  C->B  A->C  B->A  B->C  A->C

汉诺塔(C语言)_C语言

标签:柱子,圆盘,hanoi,C语言,汉诺塔,盘子,移动
From: https://blog.51cto.com/u_15821043/5935939

相关文章

  • 牛牛的计划题(c语言解决)
    题目:描述牛牛有一个学习计划,他计划在y年m月d日开始学习,但在之前他是绝不会开始学习的,但是他一旦开始学习就不会停下来,请你判断y1年m1月d1日牛牛应该学习吗。输......
  • Basler相机C语言接口说明
    由于公司项目需要,使用了Basler相机。所以特写此文记录如何使用Basler相机进行采图。公司项目用的代码是不能贴出来的,所以在这篇文章里就不贴代码了,只做流程上的说明。本文......
  • C语言—实现三子棋小游戏
    前言:        本篇文章将带着同学们从零开始,做一个简单的C语言小项目。项目运用的技术较为简单,适合C语言的初学者,用项目来巩固基础知识。效果展示:一、项目准备:使用软......
  • 【C语言】进阶指针Ⅰ 字符串指针、常量字符串、指针数组、指针数组使用常见。
    ......
  • C语言飞机选座问题
    C语言飞机选座问题计算思维综合实验课题目——飞机选座问题•航班排座及配餐问题:一架飞机有110个座位,分为20排,0-4排为商务舱,价格较高,每排4个座位,总共20个座位;5-19排......
  • C语言中合法的数值常量知识点记录
    1.八进制常量:开头必须是0,且八进制是0-7之间组成的数,例如,029就是错误的八进制表示方式。2.十六进制常量:0X开头,包含字母ABCDEF,不区分大小写,例如0x与0X一样,0Xaa与0xAA,都是......
  • C语言操作符详解
    操作符分类:算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用,函数调用和结构成员算术操作符(+-*/%)1.除了%操作符......
  • C语言 (数据结构)在顺序表中用二分查找和冒泡排序算法
    main.c:#include<stdio.h>#include<stdlib.h>#include"SequenceList.h"intmain(){//创建顺序表和指针SequenceListSL,*P_SL;intchoice=0;......
  • 视频直播系统源码,C语言实现图片合成功能
    视频直播系统源码,C语言实现图片合成功能 publicpartialclassForm1:Form{  publicForm1()  {    InitializeComponent();  }  privatevo......
  • 初识c语言(补)
    第一次学习c语言,并且打出了自己第一个代码#include<stdio.h>intmain(){printf("你好世界");return0;}......