このBFSのコードは、ウィキペディアの擬似コードを使用してC++で記述しました。この関数は2つのパラメーターs、tを取ります。sがソースノードでtがターゲットの場合、ターゲットがファウントの場合、検索はターゲット自体を返すか、そうでない場合は-1を返します。これが私のコードです:
#include <iostream>
#include <deque>
#include <vector>
using namespace std;
struct vertex{
vector<int> edges;
bool visited;
};
int dist = 0;
int BFS(vertex Graph[],int v,int target){
deque<int> Q;
Q.push_front(v);
Graph[v].visited = true;
while(!Q.empty()){
int t = Q.back();
Q.pop_back();
if(t == target){
return t;
}
for(unsigned int i = 0;i < Graph[t].edges.size();i++){
int u = Graph[t].edges[i];
if(!Graph[u].visited){
Graph[u].visited = true;
Q.push_front(u);
}
}
}
return -1;
}
int main(){
int n;
cin >> n;
vertex Graph[n];
int k;
cin >> k;
for(int i = 0;i < k; i++){
int a,b;
cin >> a >> b;
a--;
b--;
Graph[a].edges.push_back(b);
Graph[b].edges.push_back(a);
}
for(int i = 0;i < n; i++){
Graph[i].visited = false;
}
int s,t;
cin >> s >> t;
cout << BFS(Graph,s,t);
}
私はウィキペディアでこれを読みました:
幅優先探索は、グラフ理論の多くの問題を解決するために使用できます。たとえば、次の
ようになります。2つのノードuとvの間の最短経路を見つける(経路の長さはエッジの数>>で測定)
関数BFSを変更して、最短パスをsからtに返し、パスが存在しない場合は-1を返すにはどうすればよいですか?