Shensouguangsouコンセプト

幅優先探索(BFS)
体系的に拡張し、グラフ内のすべてのノードをチェックする目的は、それはあなたがこれまでの結果を見つけるまで、完全にマップ全体を横断し、可能な位置の結果を考慮していません。ツリー状の層、プロセスを横断することによって:最初のアクセスポイントを最初にViは、および訪問したとして、その後、アクセスViは、すべての到達可能なネイバーVi1と、Vi2と......ビタミンアクセスされていないとマークし、マークされています初期点、図の全てまで、ように訪れたように、その後、アバットメントポイントを介してアクセスしないすべての頂点の各々に対するアクセスのVi1と、Vi2と......ビタミン順序に従い、訪問としてマークされ、そして。 Viはこれまでに訪問されているパスを伝える頂点でした。
BFSは、達成するためにキュー(待ち行列)を使用して
擬似コードを

BFS(顶点v)
{
	
  	v点入队
	while(队列不为空)
  	{
		取队首点v,并把该点出队
		for(对于每一个邻接该点且未标记遍历的点u)
		{
			if(符合题目条件)
			{
				标记u点;
				u点入队;
			}
		}
	}
	return 结果
}

カントン検索:検索プロセスは、それが時間のためのスペースを犠牲にする方法である、バックトラッキングされていません。

深さ優先探索(DFS)

検索深さ優先探索戦略ははるかに可能「深い」探索木などとして続いています。基本的な考え方は次のとおりです。探査プロセスにおける問題の解決策を得るためには、一度選択は、前方探索するまでの手順を繰り返していき、父ノードの選択の別のノードに戻し、再び、要件を満たしていないことがわかりました最適な解決策を見つけます。深さ優先探索の実施は、達成するために使用される、または再帰スタックすることができます。このため、通常は木問題に変換される問題は、ツリー基本的に完成問題解決の変換を完了するための重要なステップです。
深さ優先探索の過程では、しばしば「デッドエンド」を行き止まりの多くを持っています 我々は除外これらの「デッドエンド」を入れた場合、あなたは多くの時間がそれではありません保存することができますか?「これは間違いなく、死んで終わりではありません」、とあなたのプログラムはまだだけ他の誰かのヒントが正しいを見つけるために、この方向でいき、最後に行ってみたいことは非常に「頑固」です:アナロジーは、パスの前に、他の人が示唆しています。このように、我々は多くの時間を無駄にしました。このような状況に鑑み、我々はあなたが高い検索効率を得ることができ、行かないものをマークするために、「デッドエンド」を置くことができます。
再帰的な実装コードのアイデア:

DFS(顶点v)
{
	if(满足答案条件)
	{
		记录或更改
		return
	}
  	for(对于每一个邻接v且未标记遍历的点u)
	{
		if(剪枝)
		{
			标记v为已遍历;
			 DFS(u);
			恢复标记;
		}
	}
}
公開された24元の記事 ウォンの賞賛5 ビュー1706

おすすめ

転載: blog.csdn.net/weixin_44091157/article/details/90724119