【发布时间】:2020-06-10 11:28:29
【问题描述】:
我编写了一个 C++ 程序来使用 BFS 算法找出最短路径。但是,我找不到打印路径的方法,例如构成最短路径的节点。我应该添加什么以便我可以打印出该路径?
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using st = set<ll>;
using kiwi = queue<ll>;
#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
const ll mx=1e5+123;
bool visited[mx];
ll dist[mx];
int main(){
fastio;
ll node, edge;
cin>>node>>edge;
st adj[node+1];
for(ll i=1;i<=edge;++i){
ll node1, node2;
cin>>node1>>node2;
adj[node1].emplace(node2);
adj[node2].emplace(node1);
}
///BFS
ll src, dest; cin>>src>>dest;
kiwi q;
visited[src]=true; dist[src]=0;
q.push(src);
while(!q.empty()){
ll s=q.front(); q.pop();
for(auto& x:adj[s]){
if(visited[x]) continue;
visited[x] = true;
dist[x] = dist[s]+1;
q.push(x);
}
}
cout<<dist[dest]<<endl;
return 0;
}
【问题讨论】:
-
不仅存储
dist,还存储parents,并设置parent[x] = s;,然后从dest向后走,直到一些parent[i]是src。 -
@PiotrSkotnicki 非常感谢!现在可以了!为了清楚起见,你知道任何简单的 BFS 问题,以便我可以尝试我学到的 BFS 算法。
-
@ImranIF 在迷宫中寻找出路,那里有墙'#'和空单元格''
标签: c++ breadth-first-search shortest-path