ターゲットの状態、要件間の最短の操作で初期状態を与えられている、実際には、非常にクリアBFSアップ。
各シーケンスの後に我々は、状態ノードとして動作します。エッジを生成し、すべての操作は、この操作がルールです。
幅優先探索(BFSも知られ、BFS略語、幅-記載)されている連通図 1 トラバース戦略。それは頂点から考えられているのでVスタート0、放射状に最初のトラバーサル広い面積が周り、そのように命名します。
あなたは、一般的にそれで何ができますか?最も直感的な古典的な例の一つは、我々は最後までの最短距離、設立の考えに基づいている幅優先最短経路アルゴリズムをたくさん見つけ、最初から開始する、迷路です。
******************************************
コアコード:
/**
* 广度优先搜索
* @param Vs 起点
* @param Vd 终点
*/
bool BFS(Node& Vs, Node& Vd){
queue<Node> Q;
Node Vn, Vw;
int i;
//初始状态将起点放进队列Q
Q.push(Vs);
hash(Vw) = true;//设置节点已经访问过了!
while (!Q.empty()){//队列不为空,继续搜索!
//取出队列的头Vn
Vn = Q.front();
//从队列中移除
Q.pop();
while(Vw = Vn通过某规则能够到达的节点){
if (Vw == Vd){//找到终点了!
//把路径记录,这里没给出解法
return true;//返回
}
if (isValid(Vw) && !visit[Vw]){
//Vw是一个合法的节点并且为白色节点
Q.push(Vw);//加入队列Q
hash(Vw) = true;//设置节点颜色
}
}
}
return false;//无解
}
概要
図は、あるとしVの頂点、Eのを検索するための縁、幅優先探索アルゴリズムのニーズをVと、ノードここで消費されることであるO(V)検索処理において、エッジに基づいてキューの長さを増加させる必要性はそれほど消費することが必要です、O(E)は、一般的に言えば、効率はおよそO(V + E) 。
実際には、ほとんど影響BFSアルゴリズムは、ということであるハッシュ操作、私たちはあきらめて訪問配列を、最速考えられているハッシュが、可能性のためにいくつかのトピックのハッシュ縮退へと高速O(LGN)当然の複雑さ、特定のかは、実際の状況を参照してください。
このようなタイトルに適したBFS:所与の目標状態と初期状態は、それが目標状態に初期状態からの最短パスが必要
スプレッド
そして、拡張、そしてそれは、彼らが同じノードを持つまで、検索プロセスの、それぞれ、幅優先探索を行うには終わりの初めから、ある定義によってbidirectionalspan検索アルゴリズム、であるので、彼は、エンドポイントから始まるポイントへのパスを発見しました。
テンセント書かれた質問:平均で一人一人があると仮定すると、25人の Geの友人は、6次元の理論によると、誰もがすることにより、特定の間のリンクができ6は、間接的に介して間接的に個人を認識N、彼はあなたであることを、個人の知識N、友人の今、あなたはこのプログラムを検証したい6次元理論を。
あなたはこの質問に直接幅優先探索を行う場合には、探索ノードは到達することが25あなたは双方向を使用している場合は6、そして、2本の木がちょうどに検索された3までのノードを検索し、友達に度25 3が、双方向で広アルゴリズムは、解決すべき問題は、同じDOにおける第二のツリーノードで最初のツリーノードで検索処理に判断する方法はありますか?私の理解によると、使用できるハッシュを、またはキューポインタの他の要素の中には、元のノードであり、各ノードが追加色の属性、このプロセスは、ノードのに基づいて再検索することができ、色となっているかどうかを判断します私は前に検索しました。