1. 程式人生 > >最小生成樹 prim算法

最小生成樹 prim算法

style end pri cin += main rim push ons

n表示點的個數,m表示邊的條數,在依次輸入邊的起點終點與權值,輸出總花費。

可用優先隊列優化,需要的話請留言。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool book[100];
const int inf = 2100000000;
int main()
{
    vector<int>u[100];
    vector<int>w[100];

    int n,m;
    cin>>n>>m;
    
int x,y,s; for(int i=0;i<m;i++){ cin>>x>>y>>s; u[y].push_back(x); u[x].push_back(y); w[x].push_back(s); w[y].push_back(s); } int dis[100]; fill(dis,dis+99,inf); int num=0; dis[1]=0; int minn=inf; int t,ans=0;
while(num!=n){ minn=inf; for(int i=1;i<=n;i++){ if(dis[i]<minn&&!book[i]){minn=dis[i];t=i;} } ans+=dis[t];num++;book[t]=true; for(int i=0;i<u[t].size();i++){ if(w[t][i]<dis[u[t][i]]){ dis[u[t][i]]=w[t][i]; } } } cout
<<ans<<endl; }

最小生成樹 prim算法