郑州一中1313班吧 关注:71贴子:11,138
  • 3回复贴,共1
template <class T>
class priorityQueue
{
private:
int currentSize;
T *array;
int maxSize;
void doubleSpace();
void buildHeap();
void percolateDown(int hole);
public:
priorityQueue(int capacity = 100)
{array = new T[capacity]; maxSize = capacity; currentSize = 0;}
priorityQueue(const T data[], int size);
~priorityQueue(){delete[]array;}
bool isEmpty() const {return currentSize==0;}
void enQueue(const T &x);
T deQueue();
T getHead() const {return array[1];}
};
template<class T>
void priorityQueue<T>::enQueue(const T &x)
{
if (currentSize==maxSize-1) doubleSpace();
int hole =++currentSize;
for( ;hole>1&&x<array[hole/2];hole/=2)
array[hole] = array[hole/2];
array[hole] = x;
}
template<class T>
T priorityQueue<T>::deQueue()
{
T minItem;
minItem = array[1];
array[1]=array[currentSize--];
percolateDown(1);
return minItem;
}
template<class T>
void priorityQueue<T>::percolateDown(int hole)
{
int child;
T tmp=array[hole];
for(;hole*2<=currentSize;hole=child)
{
child = hole*2;
if(child!=currentSize&&array[child+1]<array[child]) child++;
if(array[child]<tmp) array[hole]=array[child];
else break;
}
array[hole] = tmp;
}
template<class T>
void priorityQueue<T>::buildHeap()
{
for(int i=currentSize/2;i>0;i--) percolateDown(i);
}
template<class T>
priorityQueue<T>::priorityQueue(const T*items, int size):maxSize(size+10),currentSize(size)
{
array = new T[maxSize];
for(int i=0;i<size;i++) array[i+1] = items[i];
buildHeap();
}
template<class T>
void priorityQueue<T>::doubleSpace()
{
T *tmp = array;
array = new T[2*maxSize];
for(int i=0;i<maxSize;++i) array[i]=tmp[i];
maxSize*=2;
delete[]tmp;
}


IP属地:上海1楼2014-12-24 08:26回复
    class graph
    {
    private:
    char *ver;
    int Nver;
    int Nedge;
    int **d;
    int noedge;
    public:
    graph(int size,char a[],int max)
    {
    ver =new char[size];
    for(int i=0;i<size;++i) ver[i]=a[i];
    Nver=size;
    noedge=max;
    d=new int*[size];
    for(int i=0;i<size;++i)
    {
    d[i]=new int[size];
    for(int j=0;j<size;++j) d[i][j]=max;
    d[i][i]=0;
    }
    }
    graph(int size,char a[],int max,int b[][10])
    {
    Nver=size;
    noedge=max;
    ver=new char[size];
    for(int i=0;i<size;++i) ver[i]=a[i];
    d=new int *[size];
    for(int i=0;i<size;++i)
    {
    d[i]=new int[size];
    for(int j=0;j<size;++j) d[i][j]=b[i][j];
    }
    }
    void kru()
    {
    int edges=0;
    int u,v,sum=0;
    DisjointSet ds(Nver);
    priorityQueue<edge> q;
    edge e;
    for(int i=0;i<Nver;++i)
    for(int j=i+1;j<Nver;++j)
    if(d[i][j]!=noedge)
    {
    e.beg=i;
    e.end=j;
    e.w=d[i][j];
    q.enQueue(e);
    //cout<<e.beg<<" "<<e.end<<" "<<e.w<<endl;
    }
    while(edges<Nver-1)
    {
    e=q.deQueue();cout<<e.beg<<" "<<e.end<<" "<<e.w<<endl;
    u=ds.Find(e.beg);
    v=ds.Find(e.end);
    if(u!=v)
    {
    ++edges;
    ds.Union(u,v);
    sum+=e.w;
    }
    }
    cout<<sum;
    }
    };


    IP属地:上海2楼2014-12-24 08:27
    回复
      2026-03-29 10:39:13
      广告
      不感兴趣
      开通SVIP免广告
      void print(int start,int end,int prev[])
      {
      if(start==end) {
      cout << ver[start];
      return;
      }
      print(start,prev[end],prev);
      cout << "->" << ver[end];
      }


      IP属地:上海4楼2014-12-24 10:13
      回复
        没缩进差评


        6楼2015-01-16 14:00
        回复