Z1。幅優先探索(BFS)問題解決のアイデア

/ ** 
BFS解決アイデア
機能:特定のノード、感染隣接ノードから開始し、ようにノード感染、その隣接ノードの再感染、および。
二次元アレイ、ツリー、図を含むタイトル共通のデータ構造。
** / 

/ ** 
1)ノードの具体二次元アレイは、隣接ノード、すなわち、垂直方向と水平方向の四方、配列が変化として設定することができる感染
INT [] DRを新しい新しいINT = [] { - 1,0 ,. 1,0}; 
[] = DC新しい新規のint [] {0、-1、0、} int型1; 
2)ノードの特定の二次元アレイは、それを取り囲むノードを感染させました。以下の通り、すなわち8つのメソッド、変更の配列を設定することができる:
INT [] = DR新しい新規のint [] { - 1、-1、-1、0、0、。1 ,. 1 ,. 1}; 
[] = DC新しい新しいINT [int型] { - 1、0、1、-1、1、-1、0、1}; 
** / 

オブジェクト// BFSは、特定のノードを横断し、ノードが必要な結果を計算するために、感染している可能性があることです。最大値と最小値を求めることができる、それはそうで統計的な数とすることができ、。
//これは、各ノードの座標および演算結果を格納するための内部クラスを定義します。
ノード{クラス
	のint R< 
	int型C; 
	int型のVal、
	パブリック・ノード(R&LT INT、C int型、INTヴァル){ 
		this.r = R< 
		this.c = C; 
		this.val =ヴァル; 
	} 
}
すべてのノードを格納するためのキュー(先入れ先出し、FIFO)の//定義が関与
キューの<node> =新しい新しいキューLinkedListの<ノード>(); 
//横切る二次元アレイグリッド
INT = R&LTのgrid.length、C =グリッド[ 0] .LENGTH; 
{(; R&LT <R&LT R&LT ++ INT = 0 R&LT)用の
	ための(INT C = 0; C <C、C ++){ 
		典型的には、インデックス値と二つの要素の実際の値によって// isNeedToAdd実際の実装、決定
		IF(isNeedToAdd(R&LT、C、グリッド[R&LT] [C])){ 
			int型valは= ...; //計算結果
			queue.add(新しい新しいノード(R&LT、C、ヴァル)); 
		} 
	} 
} 
/ / BFS 
//注:BFSは、必ずしもそれが結果が最終的な答えに変換することができるものBFSから得た方法を分析する必要が最終的な答えの前の変数を、得るかもしれない、最終的な答えに直接付属していません。
//定義最終結果変数ANS 
INT ANS = 0; 
ながら(!Queue.isEmpty()){ 
	ノードノードqueue.poll =(); 
	(; K <4; INT = 0 K K ++){ため 
		第1の境界を決定する必要が// 
		int型= NRノード。 R + DR [K]。
		NC = node.c DR + INT [K]; 
		IF(NR> = 0 && NR <&& R&LT NC> = 0 && NC <C){ 
			//メモが決定されるために処理ノードを繰り返すことではないが、既に検索
			//メモをいくつかの治療法があります。ノードの値を変更すると、検索されていた、価値判断は、この方法では、追加のストレージスペースを取りません。2.使用するハッシュテーブル
			IF(memoExist(NR、NC、グリッド[NR]! [NC])){//メモが存在しない場合は、継続
				addToMemoを(); //メモ追加
				のint NVALを= ...; //結果の計算
				ANSを= ...; //中間結果最終結果を計算例えば、最大値を選択= Math.max ANS(ANS、NVAL); 
				queue.add(新しい新しいノード(NR、NC、NVAL))
			} 
		} 
	} 
}

  幅優先探索(BFS)を使用して問題外分析の多くが解決した場合は、質問以下のいくつかの良いを考える必要があります:

  • Nodeクラスの設計、優れたデータの特性を分析する必要
  • 初期データキューに追加されている特定のノードの分析。データを使用する必要性の背後にある最初のキューには、二つのコピー、検索、隣接ノード(キューストレージを使用)のための1つを格納し検討した場合、後者のための1つは、(実際の問​​題に基づいてデータ構造を選択するために)最終的な答えを得ました。
  • 特定のノードが隣接ノードに変換される分析する方法。
  • BFSからの結果を得ることができますどのような分析、どのようにこれらの結果、最終的な答え(最も重要なステップ)へ
  • 国境問題とメモの使用は、エラーと重複検索検索を避けることに注意してください。

  どのような用途に適したBFS問題:

  • ルートノードからの最短経路を求めます
  • 隣接感染(通常トピックのこの種はまた、深さ優先アルゴリズムDFSを使用することができます)

おすすめ

転載: www.cnblogs.com/zlxyt/p/11403358.html