Привет, я изучаю BFS, и я хотел использовать его, чтобы узнать расстояние от одной точки до другой, поэтому моя программа сканирует, например,
0 2 4
0 3 6
0 5 7
0 4 8
2 1 6
5 6 1
start, end, distance.
, и она должна сказать мне расстояние от 0 до 1 от 2 до 3 и т.д.
, поэтому в этом примере расстояние от 0 до 1 равно 10, потому что расстояние от 0 до 2 равно 4, а расстояние от 2 до 6.
но моя программа при компиляции говорит: terminate, вызываемый после создания экземпляра 'std :: bad_allo c' what (): std :: bad_allo c
Я хотел бы, чтобы вы помогли мне исправить это, поэтому работает Спасибо.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<long long> vi;
typedef pair<long long,long long> pi;
typedef vector<pi> vpi;
#define FOR(i, a, b) for(ll i=ll(a); i<ll(b); i++)
#define ROF(i, a, b) for(ll i=ll(a); i>=ll(b); i--)
#define f first
#define s second
#define pb emplace_back
#define mp make_pair
#define SQ(a) (a)*(a)
#define all(a) (a).begin(), (a).end()
vector<pair<int,int> >adjacency_list[6];
bool visited[7];
int dist[7]={-1};
int main() {
dist[0]=0;
visited[0]=1;
for(int i=1;i<=6;i++){
int a,b,c;
cin>>a>>b>>c;
adjacency_list[a].pb(mp(b,c));
adjacency_list[b].pb(mp(a,c));
}
queue<int>q;
q.push(0);
while(!q.empty()){
int current=q.front();
q.pop();
for(auto i=adjacency_list[current].begin();i!=adjacency_list[current].end();i++){
if(!visited[i->first]){
q.push(i->first);
dist[i->first]=dist[current]+i->second;
visited[i->first]= true;
}
}
}
for(int i=0;i<7;i++){
cout<<i<<' '<<dist[i]<<endl;
}
return 0;
}