最小生成樹的Prim演算法實現

2021-07-31 20:26:00 字數 1367 閱讀 9529

其中:6105(節點個數) 7035(邊數)

0(id) 1609(起始邊) 1622(終邊) 57.403187(權重)

//#include "stdafx.h"

#include "time.h"

#include

#include

#include

using namespace std;

static

int nodenumber; //圖頂點的個數

static

int edgenumber; //圖邊的個數

#define path "e://dataset//mapset//mincreatetree"

class cgrapnode

~cgrapnode() {}

intvalue;

double weigth;

cgrapnode *next;

};class cweightsort ;

class cgrap

~cgrap() {}

intvalue;

cgrapnode *next;

bool state;

cweightsort *smallweigth;

};class cqueue

void add(cweightsort *nq)

q = q->next;

}if (q->next == null)

}cweightsort * del(cweightsort *nq)

bool empty()

cweightsort *que;

};cgrap* createtree(char* filename)

cgrapnode *nt;

cgrapnode *nqt;

while (!readfile.eof()) //按空格讀取,遇到空白符結束

return grap;

}void insertqueue(cqueue &myq, int i, cgrap *grap)

//佇列中不存在

if (grap[p->value].smallweigth == null)

//佇列中已存在

else

if(p->weigthvalue].smallweigth->weight)

p=p->next;

}}double prim(cgrap *grap)

//cout << number <

}int main()

最小生成樹prim演算法實現

今天從志權師兄那裡學會了最小生成樹。所謂生成樹,就是n個點之間連成n 1條邊的圖形。而最小生成樹,就是權值 兩點間直線的值 之和的最小值。首先,要用二維陣列記錄點和權值。如上圖所示無向圖 int map 7 7 map 1 2 map 2 1 4 map 1 3 map 3 1 2 然後再求最小生成...

最小生成樹prim演算法實現

最小生成樹prim演算法實現 首先,要用二維陣列記錄點和權值。如上圖所示無向圖 int map 7 7 map 1 2 map 2 1 4 map 1 3 map 3 1 2 然後再求最小生成樹。具體方法是 1.先選取乙個點作起始點,然後選擇它鄰近的權值最小的點 如果有多個與其相連的相同最小權值的點...

最小生成樹的prim演算法實現

mst minimum spanning tree,最小生成樹 問題有兩種通用的解法,prim演算法就是其中之一,它是從 點的方面 考慮構建一顆mst,大致思想是 設圖g頂點集合為u,首先任意選擇圖g中的一點作為起始點a,將該點加入集合v,再從集合u v中找到另一點b使得點b到v中任意一點的權值最小...