最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java基于棧方式解決漢諾塔問題實(shí)例【遞歸與非遞歸算法】

 更新時(shí)間:2017年11月21日 11:26:38   作者:zy3381  
這篇文章主要介紹了Java基于棧方式解決漢諾塔問題的方法,結(jié)合實(shí)例形式分析了java棧方式采用遞歸與非遞歸算法解決漢諾塔問題的相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Java基于棧方式解決漢諾塔問題。分享給大家供大家參考,具體如下:

/**
 * 棧方式非遞歸漢諾塔
 * @author zy
 *
 */
public class StackHanoi
{
  /**
   * @param args
   */
  public static void main(String[] args)
  {
    System.out.println("腳本之家測試結(jié)果:");
    System.out.println("遞歸方式:");
    hanoiNormal(3, 'A', 'B', 'C');
    System.out.println();
    System.out.println("非遞歸方式:");
    hanoi(3, 'A', 'B', 'C');
  }
  /**
   * 遞歸漢諾塔
   * @param n
   * @param A
   * @param B
   * @param C
   */
  public static void hanoiNormal(int n, char A, char B, char C)
  {
    //hanoiNormal(1, A, B, C)等價(jià)于直接移動(dòng)A到C( move(A,C) )
    if(n==1)
    {
      move(A, C);
      return;
    }
    else
    {
      hanoiNormal(n-1, A, C, B);
      move(A, C);
      hanoiNormal(n-1, B, A, C);
    }
  }
  /**
   * 非遞歸漢諾塔
   * @param n
   * @param A
   * @param B
   * @param C
   */
  public static void hanoi(int n, char A, char B, char C)
  {
    //創(chuàng)建一個(gè)棧
    StateStack s = new StateStack();
    //將開始狀態(tài)進(jìn)棧
    s.push( new State(n, A, B, C) );
    //保存出棧元素
    State state = null;
    //出棧
    while((state = s.pop()) != null)
    {
      //如果n為1( hanoi(1,A,B,C) ),直接移動(dòng)A->C
      if(state.n == 1)
      {
        move(state.A, state.C);
      }
      //如果n大于1,則按照遞歸的思路,先處理hanoi(n-1,A,C,B),再移動(dòng)A->C(等價(jià)于hanoi(1,A,B,C) ),然后處理hanoi(n-1,B,A,C),因?yàn)槭菞#砸嫘蛱砑?
      else
      {
        //棧結(jié)構(gòu)先進(jìn)后出,所以需要逆序進(jìn)棧
        s.push( new State(state.n-1, state.B, state.A, state.C) );
        s.push( new State(1, state.A, state.B, state.C) );
        s.push( new State(state.n-1, state.A, state.C, state.B) );
      }
    }
  }
  /**
   * 從s到d移動(dòng)盤子
   */
  public static void move(char s, char d)
  {
    System.out.println(s+"->"+d);
  }
}
//狀態(tài)
class State
{
  public int n;
  public char A;
  public char B;
  public char C;
  public State(int n, char A, char B, char C)
  {
    this.n = n;
    this.A = A;
    this.B = B;
    this.C = C;
  }
}
//棧
class StateStack
{
  private State[] storage = new State[1000];
  //棧頂
  private int top = 0;
  //入棧
  public void push(State s)
  {
    storage[top++] = s;
  }
  //出棧
  public State pop()
  {
    if(top>0)
    {
      return storage[--top];
    }
    return null;
  }
}

運(yùn)行結(jié)果:

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Java排序算法之冒泡排序的原理及優(yōu)化

    Java排序算法之冒泡排序的原理及優(yōu)化

    這篇文章主要介紹了Java排序算法之冒泡排序的原理及優(yōu)化,冒泡排序的思想很簡單,遍歷數(shù)組,比較相鄰的兩個(gè)元素,順序錯(cuò)誤就把它們交換,直到整個(gè)數(shù)組排序完成,因?yàn)槊拷?jīng)過一趟排序,越小的元素會(huì)經(jīng)交換而慢慢“浮”到數(shù)列的頂端,因此叫做冒泡排序,需要的朋友可以參考下
    2023-11-11
  • Spring-Web與Spring-WebFlux沖突問題解決

    Spring-Web與Spring-WebFlux沖突問題解決

    Spring WebFlux是一套全新的Reactive Web技術(shù)棧,實(shí)現(xiàn)完全非阻塞,支持Reactive Streams背壓等特性,這篇文章主要給大家介紹了關(guān)于Spring-Web與Spring-WebFlux沖突問題解決的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • Guava本地緩存的使用過程

    Guava本地緩存的使用過程

    文章介紹了使用Guava和Redis實(shí)現(xiàn)二級緩存的原因,以及如何通過Guava作為一級緩存,Redis作為二級緩存來減少數(shù)據(jù)庫壓力,提高緩存的可靠性,同時(shí),通過一個(gè)具體示例說明了如何在微服務(wù)場景中使用Guava和Redis進(jìn)行二級緩存,最后,總結(jié)了Guava的參數(shù)機(jī)制
    2025-01-01
  • Java缺失區(qū)間的查找方法

    Java缺失區(qū)間的查找方法

    在 Java 的算法世界里,有許多有趣又具有挑戰(zhàn)性的問題等待我們?nèi)ヌ剿?今天,跟著小編一起來深入研究缺失區(qū)間的查找秘籍,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2025-02-02
  • SpringBoot中yml多環(huán)境配置的3種方法

    SpringBoot中yml多環(huán)境配置的3種方法

    這篇文章主要給大家介紹了SpringBoot中yml多環(huán)境配置的3種方法,文中有詳細(xì)的代碼示例供大家參考,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-10-10
  • java 代理模式及動(dòng)態(tài)代理機(jī)制深入分析

    java 代理模式及動(dòng)態(tài)代理機(jī)制深入分析

    這篇文章主要介紹了java 代理模式及動(dòng)態(tài)代理機(jī)制深入分析的相關(guān)資料, 代理是一種常用的設(shè)計(jì)模式,其目的就是為其他對象提供一個(gè)代理以控制對某個(gè)對象的訪問,需要的朋友可以參考下
    2017-03-03
  • 淺談MyBatis Plus主鍵設(shè)置策略

    淺談MyBatis Plus主鍵設(shè)置策略

    本文主要介紹了MyBatis Plus主鍵設(shè)置策略,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Spring?Boot?Admin集成與自定義監(jiān)控告警示例詳解

    Spring?Boot?Admin集成與自定義監(jiān)控告警示例詳解

    SpringBootAdmin是一個(gè)管理和監(jiān)控SpringBoot應(yīng)用程序的工具,可通過集成和配置實(shí)現(xiàn)應(yīng)用監(jiān)控與告警功能,本文給大家介紹Spring?Boot?Admin集成與自定義監(jiān)控告警示例詳解,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • SpringBoot整合RabbitMQ示例詳解

    SpringBoot整合RabbitMQ示例詳解

    這篇文章主要介紹了SpringBoot整合RabbitMQ示例詳解,RabbitMQ是一個(gè)實(shí)現(xiàn)了AMQP高級消息隊(duì)列協(xié)議的消息隊(duì)列服務(wù),用Erlang語言。是面向消息的中間件,需要的朋友可以參考下
    2023-07-07
  • 解決JDBC連接Mysql長時(shí)間無動(dòng)作連接失效的問題

    解決JDBC連接Mysql長時(shí)間無動(dòng)作連接失效的問題

    這篇文章主要介紹了解決JDBC連接Mysql長時(shí)間無動(dòng)作連接失效的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論

平凉市| 明溪县| 塔城市| 恭城| 章丘市| 宁津县| 天峻县| 锦屏县| 绥阳县| 舟曲县| 旬邑县| 泸西县| 汉寿县| 阿坝县| 綦江县| 恭城| 张北县| 额济纳旗| 遂平县| 石泉县| 洪洞县| 体育| 抚州市| 高要市| 濮阳县| 登封市| 临桂县| 土默特左旗| 左权县| 扬中市| 司法| 桦甸市| 湖南省| 本溪| 九寨沟县| 海兴县| 钟祥市| 张家口市| 南乐县| 金堂县| 凤山市|