欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言漢諾塔的簡單了解

 更新時間:2021年02月08日 14:24:10   作者:daener  
這篇文章主要給大家介紹了關(guān)于C語言漢諾塔的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

漢諾塔詳解

以4層為例

以下為我的拙見,還希望大佬雅正

要把漢諾塔移動到c 需要把1,2,3層移到b 把4移動到c 在吧123移動到b

但是一次只能動一塊 所以我們目前要做的就是把上面三塊移動到b

那就需要把1 2移動到c

由此我們可以推出要把1,2移動到c,只需要把1移動到b

這里我們發(fā)現(xiàn)有很多重復(fù)的自相似動作

我們就可以設(shè)計遞歸 遞歸需要1,遞歸體 2 出口。

遞歸體

移動n-1個盤子和1個盤子和n個盤子過程都是相似的

但是每次放入的桿子不一樣。

出口

n=1時只剩一個盤子,直接移動到c即可

hanoi(n ,A , B , C)

N 移動數(shù)量

A 出發(fā)地

B 借助地

C 終點(diǎn)

這個函數(shù)的意思就是有n個盤子從A出發(fā)借助B來到C

現(xiàn)在有n層漢諾塔 就需要把上面n-1層移動到B

hanoi(n-1,A,C,B)

這個函數(shù)就是我們要把n-1個盤子從A借助C移動到B

move(a,c)現(xiàn)在不需要再借助了 可以直接從a移動到c

接下來我們就要借助A吧剩下n-1個盤子移動到C了

hanoi(n-1,B,A,C)即可完成

遞歸出口

n<=1

在這里插入代碼片
```// 漢諾塔問題
//輸出移動的步驟 
#include <stdio.h>
//記錄步數(shù) 
int i = 1;
//n 第幾號盤移動, from 移動塔 to 目標(biāo)塔 
void move(int n, char from, char to) {
 printf("第%d次移動第%d號盤: %c----->%c\n", i++, n, from, to);
}

void hanoi(int n, char from, char mid, char to) {
 if (n == 1) {
  move(n, from, to);//只有一個盤子是直接將初塔上的盤子移動到目的地
 }//函數(shù)出口
 else {
  hanoi(n - 1, from, to, mid);//先將初始塔的前n-1個盤子借助目的塔移動到借用塔上
  move(n, from, to);  //將剩下的一個盤子移動到目的塔上
  hanoi(n - 1, mid, from, to);//最后將借用塔上的n-1個盤子移動到目的塔上
 }
}

int main() {
 printf("請輸入盤子的個數(shù):\n");
 int n;
 scanf_s("%d", &n);
 char x = 'A', y = 'B', z = 'C';
 printf("盤子移動情況如下:\n");
 hanoi(n, x, y, z);
 return 0;
}

總結(jié)

到此這篇關(guān)于C語言漢諾塔的文章就介紹到這了,更多相關(guān)C語言漢諾塔內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++設(shè)計模式之模板方法模式(TemplateMethod)

    C++設(shè)計模式之模板方法模式(TemplateMethod)

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計模式之模板方法模式TemplateMethod,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • C++深入淺出講解函數(shù)重載

    C++深入淺出講解函數(shù)重載

    C++允許多個函數(shù)擁有相同的名字,只要它們的參數(shù)列表不同就可以,這就是函數(shù)的重載(Function?Overloading),借助重載,一個函數(shù)名可以有多種用途
    2022-05-05
  • C++實(shí)現(xiàn)LeetCode(126.詞語階梯之二)

    C++實(shí)現(xiàn)LeetCode(126.詞語階梯之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(126.詞語階梯之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Java C++題解leetcode915分割數(shù)組示例

    Java C++題解leetcode915分割數(shù)組示例

    這篇文章主要為大家介紹了Java C++題解leetcode915分割數(shù)組示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 遞歸刪除二叉樹中以x為根的子樹

    遞歸刪除二叉樹中以x為根的子樹

    今天小編就為大家分享一篇關(guān)于遞歸刪除二叉樹中以x為根的子樹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • C語言詳解Z字形變換排列的實(shí)現(xiàn)

    C語言詳解Z字形變換排列的實(shí)現(xiàn)

    Z字形變換排列就是指將一個給定字符串根據(jù)給定的行數(shù),以從上往下、從左到右進(jìn)行 Z 字形排列,下面讓我們用C語言來實(shí)現(xiàn)
    2022-04-04
  • 詳解C++中static的用法

    詳解C++中static的用法

    這篇文章主要介紹了c++中static的用法詳解,C 語言的 static 關(guān)鍵字有三種用途,具體內(nèi)容詳情大家跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • c++中為什么可以通過指針或引用實(shí)現(xiàn)多態(tài)詳解

    c++中為什么可以通過指針或引用實(shí)現(xiàn)多態(tài)詳解

    這篇文章主要給大家介紹了關(guān)于c++中為何可以通過指針或引用實(shí)現(xiàn)多態(tài),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 淺談C++中const與constexpr的區(qū)別

    淺談C++中const與constexpr的區(qū)別

    C++11中新增加了用于指示常量表達(dá)式的constexpr關(guān)鍵字。本文將帶大家詳細(xì)了解一下const與constexpr之間的區(qū)別,需要的小伙伴們可以參考一下
    2021-11-11
  • QT使用SQLite數(shù)據(jù)庫超詳細(xì)教程(增刪改查、對大量數(shù)據(jù)快速存儲和更新)

    QT使用SQLite數(shù)據(jù)庫超詳細(xì)教程(增刪改查、對大量數(shù)據(jù)快速存儲和更新)

    這篇文章主要給大家介紹了關(guān)于QT使用SQLite數(shù)據(jù)庫的相關(guān)資料,其中包括增刪改查以及對大量數(shù)據(jù)快速存儲和更新,SQLite是一種嵌入式關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它是一個軟件庫,提供了一個自包含、無服務(wù)器、零配置的、事務(wù)性的SQL數(shù)據(jù)庫引擎,需要的朋友可以參考下
    2024-01-01

最新評論