#include
using
namespace
std;
const
int inf = 0x3f3f3f3f;//最大值,方便計算
int n, m;//n是點的個數,m是邊的數量
int dis[105], vis[105];//dis是判斷未加入生成樹的頂點到已知生成樹的最短距離,vis判斷是否已經加入生成樹
int mp[105][105];//鄰接矩陣
int sum = 0;
void prim()
}if(j == inf) break;
sum += min;//權值相加
ans++;//頂點個數相加
vis[j] = 1;//標記為已經訪問過
for(int i = 1; i <= n; i++) }}
if(ans == n)printf("%d\n", sum);
else
printf("?\n");
}int main()
prim();
}return
0;}
最小生成樹 Prim演算法(模板)
基本演算法 首先以乙個結點作為最小生成樹的初始結點,然後以迭代的方式找出與最小生成樹中各結點權重最小邊,並加入到最小生成樹中。選擇一條權值最小,且一端點a已加入生成樹,另一端點b在剩餘結點集內的邊作為最小生成樹上的邊,同時將b列入生成樹的已有點集中。當所有結點都加入到最小生成樹中之後,就找出了連通圖...
模板) 最小生成樹Prim演算法
演算法跟dijkstra很像 但是要特別注意兩點 1.最好使用乙個額外的陣列來保證每個點只被訪問一次,否則的話應該保證在35行處使用e.dis dis e.num 而不僅是 否則會造成一些相等的額外相加。2.40行的地方要注意與dijkstra的區別!不是加而是直接換!include include...
最小生成樹prim演算法(模板)
prim演算法適合稠密圖,即邊數較多而點較少的情況,時間複雜度為o n2 o n 2 堆優化的情況下,如果點數為m,邊數為n,可以達到o nlog m o n logm 思想很簡單,就是每次尋找一條由已加入集合的點和與它們相鄰的沒加入集合的點的權值最小邊,進行n 1次就找出來了,也是貪心的思想,實現...