栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

图的应用——Prim算法最小生成树

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

图的应用——Prim算法最小生成树

1.实验目的

(1)掌握图的相关概念,包括图、有向图、无向图、子图、连通图、度、入度、出度、简单回路、环等;

(2)掌握图的各种存储结构,包括邻接矩阵和邻接表等;

(3)掌握图的基本运算,包括创建图、输出图、深度优先遍历、广度优先遍历等;

(4)掌握图的其他运算,包括最小生成树、最短路径、拓扑排序和关键路径等算法。

2.实验内容

利用Prim算法求网的最小生成树。

要求和提示:设图的顶点数为10个。为简单起见,网中边的权值设成小于100的整数,可利用C语言的rand()函数产生。

3.源程序和实验结果

#include
using namespace std;

#define MAX 100
#define INF 10000

int graph[MAX][MAX];

int prim(int graph[][MAX], int n)
{
    int lowcost[MAX],closedge[MAX];
    int min_1,min_2,sum = 0;
    for(int i = 2;i <= n;i++)
    {
        lowcost[i] = graph[1][i];
        closedge[i] = 1;
    }
    closedge[1] = 0;
    for(int i =1;i <= n-1;i++)
    {
        min_1 = INF;
        min_2 = 0;
        for(int j = 1;j <= n;j++)
        {
            if(lowcost[j] < min_1&&closedge[j]!=0)
            {
                min_1 = lowcost[j];
                min_2 = j;
            }
        }
        cout << "V" << closedge[min_2] << "->V" << min_2 << "=" << min_1 <> m >> n;//m顶点数  n边数
    memset(graph,INF,sizeof(graph));
    for(int i = 1;i <= n;i++)
    {
        cin >> v >> e >> cost;
        graph[v][e] = graph[e][v] = cost;
    }
    int Sum;
    Sum = prim(graph, m);
    cout << "最小权值和" << Sum << endl;
    system("pause");
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/587707.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号