1. 程式人生 > >priorityQueue優先順序佇列 (python、c++)

priorityQueue優先順序佇列 (python、c++)

優先順序佇列

優先順序佇列

佇列就是一個先進先出(FIFO)的結構,而優先順序佇列則是對佇列裡的每一個元素設定一個優先順序,取元素時先獲得優先順序最高的一個元素。在python和c++裡都有庫可以呼叫。(java裡應該也有,但是我不會java,所以算了吧。)

今天看了SNIC超畫素分割的一個程式,“每次取距離中心最近的點”這個操作,想想就很麻煩。研究發現把距離設定成優先順序,然後用一個佇列就解決了。對基於SDF網格的三維重建,可能也會碰到類似的需要對網格排序的情況。庫幫忙自動維護這些資料,實在是太方便了。

python

直接用SNIC裡面的例子吧

from Queue import PriorityQueue

Q=
PriorityQueue() Q=putinQ(ck,Q,numk) #初始化Q class NODE(object): def __init__(self,priority,description1,description2,description3): distance=int() xk=int() yk=int() k=int() self.priority=distance self.description1=xk self.description2=yk self.
description3=k def __cmp__(self,other): return cmp(self.priority,other.priority)#優先順序佇列 def putinQ(ck,Q,numk): for k in range(numk): tempnode=NODE(0.0,1,1,1) tempnode.priority=0.0 tempnode.description1=ck[k][0] tempnode.description2=ck[k][1] tempnode.
description3=k Q.put(tempnode) return(Q) #獲得Q裡的元素 Q.get(); #加入元素 Q.put(a); #Q的長度 Qlength=Q.qsize()

C++

#include<queue>  
using namespace std;
priority_queue<int> big;  //大根堆  
priority_queue<int,vector<int>,greater<int> > small;  //小根堆,最後的兩個“>”之間要有空格,vector不用單另開標頭檔案。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
 
struct node
{
    int s,b;
    bool operator < (const node &x) const
    {
        if(x.s!=s)
            return x.s>s;     //從小到大
        else
            return x.b<b;     //從大到小
    }
 
}A[100];
 
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&A[i].s,&A[i].b);
    }
    sort(A+1,A+1+n);
    for(int i=1;i<=n;i++)
    {
        printf("%d %d\n",A[i].s,A[i].b);
    }
    return 0;