Builderは、再帰的に(やっと理解)8つのクイーン問題を解決します

昨日失敗し、夜を見たか、取得できませんでしたが、少なくともリーダー。

8人の女王の前に言えば、私が最初に単純な再帰ジェネレータを取ります:

私は自分自身の時間を忘れていることを恐れて、分析下のマークを考えて与える、これはマルチリスト[]バーカーの除去です。

デフ(ネスト)フラット化:
    試してみてください。
        ネストされたサブリストで用:
            以下のための要素平坦化(のsubList) 
        #1 印刷(要素)
        収率素子
ループを受信するための#メイン出力、。 TypeError例外を除きます: 返すためにネストされた#子をもたらします

 外観は非常に単純な再帰ジェネレーターのようです、私はその背後に慎重な分析が、実際には、私が理解し、その後、多くの労力を費やすために行くが、また理解していなかった、慎重な分析、私は読んでいないと思いました

使用されるこの再帰は、私は通常、戻り、今回のダブル収率で、いくつかの簡単な再帰を書いた実際には、人々が罠に陥るがあるだろう、二重の収量を生成し、私も苦しみます

再帰的な発電が唯一の利回りを使用する可能性がある場合8人の女王の後ろに再帰的な発電機はまた、二重の形式を得ているので、

次の必要とされる降伏戻り値を覚えて、(なし)を送信しない、またはケース内部のforループの値が、実際には、次の値を持つ場合、私は時間分析がはるかに少ない迂回路を取ることができている可能性があります。

次の値をテストすると失敗した後、値がリスト内の要素のすべての戻り値のセットのリストに次のことができない、リストは最初の値だけ内側に設定する要素のリストを返します。

失敗の具体的な理由の隣、実際には、私はまだ把握することはできません。あなたが何か提案がある場合は、メッセージを残してください。

サイクルタイムの値は、値のリストになりますため、これは原則ありません同じ原因でサイクルのために価値があり、リスト内の1つのアウトすべての要素の一つに生じます。

次のエラーの場合には:

デフ(ネスト)フラット化:
    試してみてください。
        ネストされたサブリストで用:
            元素=次の(平坦化(サブリスト))
            #プリント(要素)
            収量要素
            フラット化(サブリスト)の要素のための#:
            #プリント(要素)
            #降伏要素
    TypeError例外を除きます:
        収量ネストされました


=リスト([[[[[2]]]、5 [3、[4]]]、[4]、1])(平坦化)
プリント(A)
B =([[2,3]])平坦化
印刷(リスト(b)参照)

 これは失敗し、出力の場合です:

[1、2、4]
[2]

 

シェラー、I再帰的な発電機と予備的な理解と定義のリストについては、

一般と2つの収量、収量はベースライン状態の子で、トリガ後に、親収量に戻り、値によって循環のための父を得、コンセントの上位層が戻り、最も外側の層を知るために渡し、親yelidリターンの最外層データ。

だから、最初のサブ歩留まりを見つけるその後、ベースライン状態を知る、この再帰的な発電機を見て、私が理解できるものの、歩留まりの父を識別するが、私は本当にに書き込み、書いてみましょう。

 

この財団と、8人の女王のコードは、私は何も大きな問題を分析しました。

 

その後、再帰的な多くの私は痛みに加えて、痛みに、一緒に頭痛を見て、プラス発電されている回、夜間に痛みや二時間良い睡眠を費やしています。()今日も、最後に失敗しました。

問題の概要:

N×N Nチェス女王のグリッド上に配置され、それらはお互いを攻撃することができない、すなわち、任意の二つのクイーンズは、同じ列内のすべての振り子方式の出力同じ列または同じ対角線ありません。

「」 ' 
の最初の行の女王第三の要素は、状態[0] = 3の場合、リストを定義し
、単に行インデックス、カラムの内容、添字は確かに繰り返されないように呼ばれることも、リスト要素が重複することはできません(要件)は
、二次元平面定義され、xは、yは、その後、Y軸、X軸焦点に重ならない場合は
' 『』

ルールを定義し、次の女王の位置を満たすためにどの条件です。
DEF 競合(状態、nextX):#状態が祖先であってもよい、nextX先に定義された座標xと定義されます
    nextY = LEN(州)
     「」「のいずれか女王以前の条件が満たされ、直接BREAKであれば、すべて上記とnextX、クイーンコントラスト、それを定義した後Trueを返す「」」
    のためにレンジ(nextY):  I y軸パラメータ女王ことを示す
        「」「列が等しいかどうかを判定し、存在する第nextY-iがあるか否かを判定するにおける対角線同じ」 ' 
        のiF ABS(状態[I]は- nextX)(0 、nextY - I):  Y軸パラメータnextYで女王の
            復帰真の
     リターン#のエラーが返され、次の標準的な位置を示して女王
 

呼び出されるこの機能を使用して、その後のテストケースは、その後、すでに前にすべてが、唯一の最後の座標を知っている座標

デフqueens_t(NUM、状態):
    もしLEN(状態)== NUM​​-1:#クエリが最後の女王ではありません
        (NUM)の範囲内POS用:#は、各列のためのクイーンズ値への最後の試みを作ります
            そうでない場合は、競合(状態、POS):列の標準的なパラメータの遵守がある場合には#が返されます。
                収量POS

プリント(リスト(queens_t(4、(1、3、0))))

 コードのロジックは比較的簡単です。

これは完全なコード、コメントは非常に豊富で、全体の論理、実際には、再び再帰的な試みがあまりにも失敗している、唯一のベースライン状態をアクティブに、そして唯一のデータ層を返し、終了

試行錯誤中間のCOUNT_B = 0#初期化時間
最後の初期化の終了0#での試行錯誤のcount_s =数

デフ女王(NUM、状態):
    (状態を)lenの場合== NUM​​-1:#クエリは、再帰的な基準条件のリターンに、最後の皇后ではありません。
        (NUM)の範囲内POS用:#は、各列のためのクイーンズ値への最後の試みを作ります
            そうでない場合は、競合(状態、POS):列の標準的なパラメータの遵守がある場合には#が返されます。
                収量(POS)#これは、これが完了した場合、データを返すために、標準のデータポートであり、これは修飾クイーンズ鎖であることを示します
            他:
                グローバルcount_s
                試行回数にcount_s + = 1#易筋経は、最後のステップに失敗しました
    他:
        #それは最後の1、サイクルPOSでない場合は、次の範囲内POS(NUM)について
            ない競合は(状態は、POS)場合:#はposが有効でない、有効な実行が、無効あきらめました
                #結果=次(クイーン(NUM、状態+(POS)))は、次の値で#はまた、私は分析を所有し、この時間は、次の値が見つからないでなければならず、失敗しました
                                                                #深さ、この失敗は、エラーの値であるので、再試験を除いて、試してみたくありません
                #プリント(POS)
                #収率(POS)+結果
                結果をクイーンズ(NUM、状態+(POS))において、forループ#値は、層がデータを返す、クイーンN、N-1バック層は、定義されました
                        #印刷((POS)+結果)
                        収量(POS)+結果
            他:テストは、次のサイクルに入るために、あきらめて直接渡していなかったので、多くのミドル簡単にあきらめる人のテストは、実際に#があります
                試験種の間の障害の数のグローバルCOUNT_B番号の真ん中
                COUNT_B + = 1

= 8

印刷(リスト(女王(NUM、())))
#印刷(LEN(リスト(女王(NUM、()))))
印刷(COUNT_B)
印刷(count_s)

 当時、コードの最適化バージョン:

count_ss = 0
DEF queens_simple(NUM = 8、状態=()):
    (NUM)の範囲内のPOSのために:#はメインループを開始し、ループは各要素のちょうど任意の列座標を配置することができます
        コンフリクト(状態、POS)されていない場合は#着信要素が規則に適合しなければなりません
            もしLEN(状態)== NUM​​-1:ベースライン条件#戻り、ベースライン条件(最後の要素の出力)
                収量(POS)
            他:
                ''「リターンの層、再帰中に、あなたがテストの基本的な条件を満たすことができるかどうかを確認し、基準をあきらめなかった、forループの値に関する基準」
                :queens_simple(NUM、状態+(POS))で結果のために
                    収量(POS)+結果
        他:
            グローバルcount_ss#は失敗回数を定義し、非簡略化されたバージョン番号の比較と一致しています。
            count_ss + = 1

印刷(リスト(queens_simple()))

 2つのコードの出力結果は、試行錯誤の数を含め、一致しています。

再び結論づけ:

個人的な要約、再帰式では、正しいデータのエクスポートを返すベースラインなぜなら、最初の良いベースラインの条件のような、いくつかの条件の方が重要

良いフォーマットのような(戻り値を持たなければならない)、あれば第二に、受諾の正しいパスに戻すために良いデータが、ここでは、サブループが受け取るため収量はまだ非常に良いですが、データをマージする必要性を受け入れます

また、一時的ではない二つは言わないyiled何を、ベースライン条件データへの復帰、メインデータに戻ります。

それファーガソンは、最終的にはまあまあ少なくとも読み取ることができ、数えます。

 

説明次のリンク上の2人、私は理解していない、他の人の者を見てみてください、私は他の人の書き込みを見ていた、私は理解していません。

https://blog.csdn.net/qq_33085753/article/details/86592361

https://blog.csdn.net/wang903039690/article/details/79706311

おすすめ

転載: www.cnblogs.com/sidianok/p/11802800.html