コード例(非再帰)_javaのスタックとハノイ問題のタワーを解決するためのプログラミングのJava - JAVA

出典:こんにちは学習ネットワーク敏感と熱心なフォーラムはwww.piaodoo.comお互いから学ぶことを歓迎します

[タイトル]

  ハノイの問題のより多くの古典的なタワーは、ルールここで少しゲーム変更:今、右端に左端の列から直接移動が規制を、右端までのところ、直接から左に移動しませんが、真ん中を通過する必要があります。記録動作及び手順の最も最適総数が移動したときタワーN層を求める場合。

[回答]

  この問題への再帰的な解決策を使用する前に、我々は再帰的な方法ではありませんハノイの塔を、シミュレートする3つの塔の積み重ねでここにいます

  原理はこれです:ハノイの塔は、塔は左から右へ、我々は右から左に直接移動することはできませんが、唯一、実際には、アクションを行うことができ、あるミドル、通過することから、直接的な動きをすることはできません変更しました4:左 - >で - >左 - >右、右 - >

  実際には、ハノイの塔の動きをシミュレートするために、スタック、スタックのポップ・スタック、スタックの他のスタックとして、別のスタックにプッシュされているように、これを理解し、そしてそのことについての特定の要素、2があります原則:

  A:小さな圧力原理、要素値に圧入されるように、あるハノイの塔の基本的なルールであるスタックのスタックの頂部に圧入される要素の値より大きくすることはできません

  II:それが残っている場合は、操作の私の最後のステップで不可逆的な原則に隣接する - >、次のステップが動作して間違いではありません - >左、または再び上を移動するとの同等

  これらの2つの原則により、我々は2つの非常に有益な結論を導き出すことができます。

  1、アクションゲームは、L-> Mでなければなりません

  2は、プロセスのステップの最小数のうちいずれかの時点で、唯一の4つのアクションアクションは、隣接する小さな圧力日本不可逆性の原則に違反しない、他の3つは、特定のアクションの違反になります

[]コードの実装

java.util.Stackをインポート、
クラスデモ{ 
  公共のenum {アクション
    いいえ、LTOM、MToL、mTORの、RToM 
  } 

  // NUMは、料理の数で、左、中には、右から左、右の3つの列を表す
  (ハノイint型のpublic staticをNUM int型、文字列は左、MID文字列、文字列の右){ 
    左の代表// LS、MS、はRSスタック(アナログ列)の右側の3 
    スタック<整数> = LS新しい新しいスタック<整数>(); 
    スタック<整数>ミリ秒新しい新しい= <整数>スタック(); 
    スタック<整数> = Rsの新しい新しいスタック<整数>(); 
    lS.push(Integer.MAX_VALUEの); 
    mS.push(Integer.MAX_VALUEの); 
    rS.push(Integer.MAX_VALUEの); 
    用(INT I = NUM; I> 0; I - ){ 
      lS.push(I); 
    } 
    アクション[] = {レコードAction.No}; 
    int型STEP = 0。
    (!。rS.size()= NUM + 1)一方{
      fStackToStack + = STEP(録音、Action.MToL、Action.LToM、LS、MSは、MIDを左)、
      STEP + = fStackToStack(録音、Action.LToM、Action.MToL、MS、LS、MID、左)。
      STEP + ; fStackToStack =(RS、MS、右、MIDのレコード、Action.MToR、Action.RToM)
      STEP + = fStackToStack(録音、Action.RToM、Action.MToR、MS、Rsの、MID、右); 
    } 
    戻りステップと
  } 

  preNoActは今逆の操作によって実行されるアクションと、nowActが現在実行される動作である// 
  (アクション[] fStackToStack int型のpublic staticレコード、アクションpreNoAct、アクションnowAct、スタック<整数> fStack、スタック<整数> TSTACK、 文字列、文字列から){ 
    IF(RECORD [0]!= preNoAct fStack.peek &&()<tStack.peek()){  
      tStack.push(fstack。 POP())。
      するSystem.out.println( "移動" + tStack.peek()+ "" +から+ " - >" +へ) 。
      レコード[0] = nowAct。
      1を返します。
    } 
    0を返します。
  } 

  メインボイドのpublic static(文字列[]引数){ 
    iはハノイ(3、 "左" "中"、 "右")= INT。
    System.out.println( "一共走了" + I + "步"); 
  } 
}

 

概要

この記事では、より多くのコード例(非再帰的)ハノイ問題の塔は、我々は手助けをしたいを解決するためのスタックの内容全体でJavaプログラミングについてです。興味のある友人を参照することができます任意の時点でメッセージを残すことができますどのような問題の詳細な実施例のパイ近似のためのJavaモンテカルロアルゴリズムを、遺伝的アルゴリズムのJavaの迷路の外に、Javaは4混合コンピューティングコードサンプルを達成し、そして、我々は議論や交流を歓迎します。

元のアドレスは次のとおりです。http://www.piaodoo.com/thread-13253-1-1.html ストッキングを制御 www.txdah.com 131外www.buzc.org楽しく学習がよりよく学習することができます!

おすすめ

転載: www.cnblogs.com/txdah/p/12093775.html