Я пытаюсь использовать bfs, но он включает взвешенный путь и его базу очередей с приоритетами, поэтому в моем коде приоритет будет отдан менее взвешенному пути.
Я назначаю парную переменную один для веса, а другой для узла.
P.first - это вес, а p.second - это узел.
Есть ли какая-либо проблема в объявлении, я не могу ее получить .. насколько я знаю, я делаю правильную реализацию.
Также могу ли я отодвинуть целую пару в вектор?
моя проблема в том, что он не может выделить вектор в переменную int?
ошибка: невозможно преобразовать '__gnu_cxx :: __ alloc_traits> :: value_type {aka std :: pair}' в 'int'в назначении |
#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int> PAIR;
vector<PAIR> adjecent[100];
priority_queue < PAIR ,vector< PAIR >,greater< PAIR> > q;
bool visited[50];
int parent[50];
int distnce[50];
int path[50];
int sizee = 0;
void ucs(int start, int goal)
{
int v,weight;
PAIR newPair; //newPair is inheritance of PAIR variable so it is actually same . . . if i am not wrong
visited[start] = true;
q.push({0, start});
distnce[start] = 0;
while(!q.empty())
{
newPair = q.top();
visited[newPair.second]=true;
if(newPair.second == goal)
return;
q.pop();
for (int i =0; i < adjecent [newPair.second] .size();i++)
{
v = adjecent[newPair.second][i].second;
weight = adjecent[newPair.second][i].first;
if(!visited[v] && distnce[v]> newPair.first+weight)
{
distnce[v]= newPair.first+weight;
parent[v]= newPair.second;
q.push({distnce[v], v});
}
}
}
}
int main()
{
int node,edge;
cout<< "NODE: ";
cin>> node;
cout<< "EDGE: ";
cin>> edge;
for(int i=0;i<edge;i++)
{
int start;
PAIR p;
cin>> start >> p.first >> p.second;
adjecent[start].push_back(p);
}
for(int i =1;i<=node;i++)
{
distnce[i] = 10000;
}
ucs(1, 4);
//printPath();
}