使用bfs查找从一个顶点到另一个顶点的最短路径



Bfs从顶点1开始,找到到达另一个顶点x所需的距离。

我使用模板编写了一个bfs,但它出现了错误,我在cpp中太笨了,无法调试。请帮我调试。这是代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,x,y,z,o,dis[100010],thing[100010];
vector <int> adj[100010];
bool vis[100010];
queue <int> q;
void bfs(int g){
for (int i=2;i<=n;i++){
dis[i]= 0;
vis[i]=false;
}
q.push(1);
while (!q.empty()){
q.pop();
for(int i=0;i<adj[q.front()];i++){
if (!vis[i]){
q.push(i);
dis[i]= dis[q.front()]+1;
int l=adj[q.front()]; 
if(l==g){
cout<<dis[adj[q.front()]]<<"n";
}
vis[i]=true;
}
}
}
}
int main(){
cin>>n>>m;
for (int i=1;i<=m;i++){
cin>>x>>y;
adj[x]=y;
adj[y]=x;
}
cin>>o;
for (int i=1;i<=o;i++){
cin>>z;
thing[z]=1;
}
for (int i=1;i<=n;i++){
if (thing[i]==1){
bfs(i);
}
}
}

我想你在期待这条

vector <int> adj[100010];

以创建100010 int的向量。它没有,它创建了一个由100010个int空向量组成的数组。您的代码无法编译。看看其他的,我想你真的只是想要

vector <int> adj(100010);

这创建了一个100010int的向量。至少你的代码编译得很干净,但我不知道输入,所以不能测试

此外,您永远不需要包含bits/stdc++

相关内容

最新更新