Я пытался применить алгоритм простых чисел, используя очередь с приоритетами. когда я пытаюсь выбрать элемент sh в очереди с приоритетами, приоритет элемента меняется на некоторое неожиданное значение .
Когда я запускаю код 2 раза, приоритет одного и того же элемента на одном и том же входе изменяется
struct compare{
bool operator()(pair<int, double> p1, pair<int, double> p2){
return p1.second > p2.second;
}
};
priority_queue<pair<int,double>, vector<pair<int, double> >, compare> Q;
//temp is used to display the elements of the Q
priority_queue<pair<int,double>, vector<pair<int, double> >, compare> temp;
while(!Q.empty()){
int u = Q.top().first;
Q.pop();
temp = Q;
PQ[u] = false;
for(int i = 0; i < adj[u].size(); i++){
if(cost[adj[u][i].first] > adj[u][i].second && PQ[adj[u][i].first] == true){
Q.push(make_pair(adj[u][i].first,adj[u][i].second);
}
}
//displaying elements of the priority queue: Q
temp = Q;
while(!temp.empty()){
cout << temp.top().first << " = " << temp.top().second << endl;
temp.pop();
}
cout << "\n\n";
}
выход для первого запуска
7 = 6.95326e-310
8 = 6.95326e-310
5 = 6.95336e-309
6 = 6.95336e-309
1 = 1.41421
1 = 32767
3 = 32767
8 = 32767
5 = 32767
3 = 32767
2 = 32767
7 = 32767
6 = 32767
4 = 32767
4 = 32767
2 = 32767
выход для 2-го прогона
5 = 0
6 = 0
1 = 1.41421
8 = 12.53
7 = 12.53
1 = 32767
3 = 32767
8 = 32767
5 = 32767
3 = 32767
2 = 32767
7 = 32767
6 = 32767
4 = 32767
4 = 32767
2 = 32767