위 코드의 의사 코드를 사용하여 C++에서 BFS 코드를 작성했습니다. 이 함수는 두 개의 매개 변수 s, t를 사용합니다. s가 소스 노드이고 t가 대상인 경우 대상이 fount 인 경우 검색은 대상 자체를 반환하거나 그렇지 않으면 -1을 반환합니다. 예를 들어,BFS를 사용하여 두 노드 사이의 거리를 찾는 방법은 무엇입니까?
너비 우선 탐색은 그래프 이론에 많은 문제를 해결하는 데 사용할 수 있습니다 : 나는 위키 피 디아에서이 글을 읽을
#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); }
:
이 사이의 최단 경로를 찾는 여기 내 코드입니다 두 개의 노드 u와 v (경로 길이가 에지의> 번호로 측정 됨)
경로가없는 경우 가장 짧은 경로를 s에서 t로 되돌리기 위해 함수 BFS를 어떻게 변경합니까? 에스?
시작 노드와의 거리를 저장하기위한 변수를 만듭니다. 새 노드로 이동할 때마다이 거리 변수를 업데이트하십시오. – jondinham
@ PaulDinh 그러나 이것은 최단 거리 또는 거리만을 제공합니까? – 2147483647
위의 구현으로 distance 변수를 넣으면 여행 할 때 현재 노드까지의 거리 만입니다. – jondinham