最小生成树-prim算法模板

简介: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define inf 10000000 #define maxn 21 int m,n; int edge[maxn][maxn],lo
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define inf 10000000
#define maxn 21
int m,n;
int edge[maxn][maxn],lowcost[maxn],nearvex[maxn];
void prim(int u0)
{
    int i,j;
    int sumweight=0;
    for(i=1; i<=n; i++)
    {
        lowcost[i]=edge[u0][i];
        nearvex[i]=u0;
    }
    nearvex[u0]=-1;
    for(i=1; i<n; i++)
    {
        int min=inf;
        int v=-1;
        for(j=1; j<=n; j++)
        {
            if(nearvex[j]!=-1 && lowcost[j]<min)
            {
                v=j;
                min=lowcost[j];
            }
        }
        if(v!=-1)
        {
            cout<<nearvex[v]<<" "<<v<<" "<<lowcost[v]<<endl;
            nearvex[v]=-1;
            sumweight+=lowcost[v];
            for(j=1; j<=n; j++)
            {
                if(nearvex[j]!=-1 && edge[v][j]<lowcost[j])
                {
                    lowcost[j]=edge[v][j];
                    nearvex[j]=v;
                }
            }
        }
    }
    cout<<"weight of mst is "<<sumweight<<endl;
}
int main()
{
    ios::sync_with_stdio(false);
    freopen("1.txt","r",stdin);
    int i,j,w,u,v;
    cin>>n>>m;
    memset(edge,0,sizeof(edge));
    for(i=1; i<=m; i++)
    {
        cin>>u>>v>>w;
        edge[u][v]=edge[v][u]=w;
    }
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=n; j++)
        {
            if(i==j)
                edge[i][j]=0;
            else if(edge[i][j]==0)
                edge[i][j]=inf;
        }
    }
    prim(1);
    return 0;
}

/*
7 9 
1 2 28
1 6 10
2 3 16
2 7 14
3 4 12
4 5 22
4 7 18
5 6 25
5 7 24

*/

  

目录
相关文章
|
5月前
|
算法
【算法】前缀和——二维前缀和模板题
【算法】前缀和——二维前缀和模板题
|
3月前
|
算法 决策智能
基于prim算法求出网络最小生成树实现网络社团划分和规划
该程序使用MATLAB 2022a版实现路线规划,通过排序节点权值并运用Prim算法生成最小生成树完成网络规划。程序基于TSP问题,采用遗传算法与粒子群优化算法进行路径优化。遗传算法通过编码、选择、交叉及变异操作迭代寻优;粒子群优化算法则通过模拟鸟群觅食行为,更新粒子速度和位置以寻找最优解。
|
5月前
|
机器学习/深度学习 算法 Java
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
这篇文章介绍了基于贪婪技术思想的Prim算法和Dijkstra算法,包括它们的伪代码描述、Java源代码实现、时间效率分析,并展示了算法的测试用例结果,使读者对贪婪技术及其应用有了更深入的理解。
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
|
6月前
|
存储 传感器 算法
|
7月前
|
算法 Java 数据处理
Java算法模板 数据流快读
Java算法模板 数据流快读
54 2
|
6月前
|
设计模式 JavaScript 算法
vue2 原理【详解】MVVM、响应式、模板编译、虚拟节点 vDom、diff 算法
vue2 原理【详解】MVVM、响应式、模板编译、虚拟节点 vDom、diff 算法
200 0
|
6月前
|
机器学习/深度学习 人工智能 算法
|
7月前
|
算法 Java
Java数据结构与算法:贪心算法之最小生成树
Java数据结构与算法:贪心算法之最小生成树
|
7月前
|
算法 前端开发 安全
C++算法模板
C++算法模板
38 0
|
7月前
|
算法 C语言
数据结构与算法——最小生成树问题(什么是最小生成树、Prim算法、Kruskal算法)
数据结构与算法——最小生成树问题(什么是最小生成树、Prim算法、Kruskal算法)
42 0

热门文章

最新文章