已知條件:
圖p是一個連通圖,Y是對p使用prim算法得到的一棵生成樹,Y1是p的一棵最小生成樹
1.若Y=Y1,顯然prim算法是正確的
2.若Y≠Y1,可進行如下推導:
a)Y中有n(n≥1)條邊不存在於Y1中,在構建Y的過程中,第一次遇到這樣的一條邊時(以e表示),則e的一個端點u落在V內(V是之前的prim運算得到的一個子頂點集),另一個端點v落在V外
b)Y1是連通的,故Y1中存在u到v的一條的路徑,此路徑上必然存在一條邊f,它的一個端點落在V內,另一個端點落在V外
c)把e加入Y1,去掉f,Y1仍然連通,根據prim算法,權值W(f)≥W(e),否則e不會被選入V,如果W(f)>W(e),新構建的樹的權值和會比Y1小,而Y1是最小生成樹,因此W(f)>W(e)不成立,得W(f)=W(e)
d)對每一條類似e的邊,重復過程c),最終Y和重新構建的的Y1擁有的邊完全一致,新構建的Y1也是最小生成樹,因此Y也是最小生成樹,證明prim算法正確