1. 程式人生 > >最小生成樹 prim演算法 C++實現

最小生成樹 prim演算法 C++實現

#include <iostream>
#include <vector>
#define Inf 0x7fffffff
using namespace std;
int main()
{
    int n,m;//節點個數和邊數
    cin>>n>>m;//輸入節點個數和邊數;
    vector<vector<int>> v(n+1,vector<int>(n+1,Inf));//鄰接矩陣
    for(int i=0;i<m;++i)
    {
        int s,e,w;
        cin
>>s>>e>>w; v[s][e]=v[e][s]=w; } int s=1,sumcost=0;//開始收錄的節點,累計最小花費 vector<int> cost=v[s]; vector<bool> vis(n+1,false);//是否已經收錄 vis[s]=true; for(int k=1;k<n;++k) { int mincost=Inf,u=-1; for(int i=1;i<=n;++i) if(!vis[i]&&cost[i]<mincost) mincost=cost[u=i];//找到最小花費
sumcost+=mincost; vis[u]=true; for(int i=1;i<=n;++i) if(!vis[i]&&cost[i]>v[i][u]) cost[i]=v[i][u];//通過新收錄的節點u,重新更新最小花費 } cout<<sumcost; return 0; }