深さの検索DFS!

さて、次のステップは、この愛らしい新しい最初のブログの友人です。
直接の深い検索
深さ優先探索(深さ優先-検索)、「深い検索」(DFS)と呼ばれる、我々こんにゃくは、検索操作の最も基本的なもの。
簡単に言えば、深い検索は再帰的です。
以下の説明は、コピーされ:
生成配列を有する全ての記憶された状態の深さ優先探索を。
(1)配列の初期状態に、現在の状態として、
(2)新たに生成されたセットの現在のステータスの状態ながら、アレイに新しい状態を生成するために、現在の状態を延長する;
(3)電流を決定します状態は、その他の状態を生成するために、背面に繰り返されている場合と、前述の状態を繰り返すこと、である;
(4)現在の状態が目標は、解決策を見つけることである場合、アルゴリズムは終了目標状態であるか否かを判定する。
(5)配列が空の場合、その解決策がないことを示します。
あなたが読むことができない場合は、ああ、はい、あなたは何が起こるか想像し続けることができます。(?私たちは友達になることができます。もちろん、あなたが読めば、兄の事)
ここではイラストです:
私たちがしなければならない場合からGまで行く実線に我々が取ることができることを表しています。
だから、どのように我々は行くことができますか?
この場合、我々は、冗長な方法ではないA> B> Cへ行く> D> E> F> Gこの道路から、それは非常に単純であることができます。
しかし、このような状況では、我々はAからのさまざまなオプションを持つことができます そして、我々はGスポットに到達するために行く方法がわからない、我々は道を選択した私たちは、通過する必要はありませんでしたので、G.に到着することが可能です

例えば、我々が選択した3点A、E点からB、C、Dに到達することができます。
我々は、E Aからだけでなく、B、C、D、Fフォーポイントに行くので、我々は、B点に移動したとき
私たちはBの後に到着したとき、我々はA、C、Eの三点を指し、3つの道を見つけました。
我々はそのため 引き返すないでください 私は唯一の点Cに来ることができます
我々はCの後に行ったとき、B、Eへのアクセス権を持って、G道路の三点、我々はGスポットに直接行くことができます。
 
そこで 、「古い道を取らないの前に来る」 のアプローチを使用すると、エンドポイントに来るまでの道を見つけることです。
これがすることができるが 、「長い道のり」 が、私たちはただ、目標に到達するために 「最速ではない、」 とすることができます 「Xianxinを歩く」 ときに、この良い選択。
(最終的には肝臓の鉄の頭のすべての方法を!!!!!)
ああ深い発見されました!
以下のディープサーチのアイデアです:
「来ない」としてマーク1.すべてのポイント; 0または標識その他の//配列全体
2.開始、終了を見つけ、あなたが行くことができる場所を確認; //準備サイクル
選択3.うち現在のノードとノードマップかどうかを決定する; //
ノードの分析4.ああ来なかった; // 3,4-ステップは、ノードが有効に行くかどうかを判断することである
、それはノードに来なかった場合は、6。 //ノードマーク
6をしてから、別のノードを見つける; //で1つのレベル深い検索
7.あなたがバックアップすることができます//リターンに戻って取得することができます尽きます

そして、実際のUSACOから来//深い検索トピック:(ロサンゼルス八クイーンズバレーP1219撮影を追加します!)
P1219 8クイーン
タイトル説明
チェッカーボード6×6、及び6個以下のチェックは、各行、各列と唯一、各対角は、(例えば、含むこと、基板上に配置された2つの対角主すべての平行線に最大で1枚)。
上記配列がレイアウト246に記載さ135とすることができ、それは次のようにi番目の桁は、i行目の対応する位置にピースを有する意味します:
行番号123 456
列番号246135
それはちょうどチェッカーソリューションを置いです。すべてのチェッカーを配置する解決策を見つけるためにプログラムをコンパイルしてください。シーケンスおよび上記の方法に出力します。ソリューションは、辞書順で配置されています。前の3つのソリューションの出力をしてください。最後の行は、ソリューションの合計数です。
usaco公式から//次の言葉は、ビュー羅バレー示すものではありません
特別な注意を:大きなN(基板サイズN×N個)の場合は、あなたのプログラムをより効果的に改善されるべきです。すべてのソリューションは、事前に計算され、その後、出力のみ(またはそれについての式を見つける)、これは浮気されないでください。あなたは不正行為を主張した場合は、USACOトレーニングのログインアカウントが削除され、任意のレースのUSACOに参加することはできません。私はあなたに警告しました!
入力フォーマット
N(6 <= N <=番号 13) N×N個では基板サイズを表します。
出力形式
各溶液の二つの数字の間のスペースで区切られた3つの前の最初の3つのソリューション、。4行目は唯一の数、ソリューションの総数です。
サンプル入力出力
入力#1 
。6
出力#1
。5. 4. 3. 1. 6
。3 2 6 1 4 5
。4. 3. 1. 5 2. 6
。4
取扱説明書/ヒント
NOCOWから被写体の翻訳。
USACOトレーニングセクション1.5
 
 
以下は、香ばしいソースああです!
ソース:
の#include <ビット/ STDC ++ H.> //だけユニバーサルヘッダを生きる、
使用名前空間STD; //参照することによって解釈されるべきではない。
INT H [15]、L [15]、ZX [30]、YX [30] 、N、CNT;
// == H線、L ==カラム、ZX ==スラッシュ、RX ==右対角、Nは基板、CNTレコード番号のサイズである;
空隙DFS(INT X)//検索深さもちろん、それはDFSである
{
 (X-> N)は//もちろんのボードのすべての行で満たされたときに、上に置く場合は!
 {
  ++ CNT;
  IF(CNT <= 3)
  {
   ため(INT I = 1; I ++; Iは、= N <)
    COUT << H [I] << ''; //出力
   COUT << ENDLを; //覚えループ外キャッシュをクリーニング
  }
 }
 そうで行われ、ダウンロールを継続しない//ああだけ
 のために(INT I = 1; Iは= Nを<; Iは++)
  {
   IF(L [I] || ZX [I-X + N] YX ||)[Iは、Xが+]
斜で右側に1標識ピース()と、左斜めと、格子の同じ列場合//
    続ける; //グリッドに次を試し 
   L [I] = Z-X [X -i + N] =のYX [iが+ X] = 1; // ないようにマークとマーク事
   H [X] = iが; //保存
   DFSを(X + 1); / /次のラインフィルタ
   Lを[I] = Z-X [X -i + N] =のYX [iが+ X] = 0; // 起源  
  }  
 }
 メインINT()//メイン関数良い短いああ。
 {
  CIN >> N、
 DFS(1); //だけの最初の行の検索を開始する
 COUT << CNTは、
 0を返す; // OKノック
 }
 
まあ、それはここで、この愛らしい新しい新しい最初のブログ!

おすすめ

転載: www.cnblogs.com/xrs-2019/p/11620914.html
おすすめ