不确定这个畅通工程代码中图的存储是用了邻接表还是邻接矩阵,通过什么思路实现的?

/*

4
1 2 1 1                           1 2 0 1
1 3 4 0     (1代表费用为0)         1 3 4 0
1 4 1 1       ======>             1 4 0 1
2 3 3 0                           2 3 3 0
2 4 2 1                           2 4 0 1
3 4 5 0                           3 4 5 0

最小生成数 :
1、具有树的结构,在无向图中不能形成闭环
2、必须全部节点都要连上


*/


#include<iostream>
using namespace std;
int n, m;       //节点,节点的度
int x, y;
int z;
int dist[101];
int cost[101][101];
int visit[1001];
int sum;
int dis;
int main()
{
    sum = 0;
    cin >> n;   //输入节点数
    for (int i = 1; i <= n; i++)//初始化二维数组
    {
        for (int j = 1; j <= n; j++)
        {
            cost[i][j] = 999999;    //每个都等于 “无穷”
        }
    }

    int m = n * (n - 1) / 2;   //节点的度的最大数量
    while (m--)     //判断每条路是否已修
    {
        cin >> x >> y >> dis >> z;
        if (z == 0)//如果路是未修,将dis存入数组
            cost[x][y] = cost[y][x] = dis;
        else//若路已修,dis为0
            cost[x][y] = cost[y][x] = 0;
    }
    for (int j = 1; j <= n; j++)//将第一个点到另外的点的dis存入dist
    {
        dist[j] = cost[1][j];    //存放距离的大小
    }
    visit[1] = 1;
    dist[1] = 0;
    for (int i = 1; i <= n; i++)
    {
        int mindis = 999999, k = 0;     // 999999代表无穷,说明两地不通路
        for (int j = 1; j <= n; j++)
        {
            if (visit[j] == 0 && dist[j] < mindis)  // 费用不为0 且 通路
            {
                mindis = dist[j];
                k = j;
            }
        }
        visit[k] = 1;

        if (k != 0)//如果k!= 0,说明图上有点 没有被连接
        {
            sum += dist[k];
            for (int j = 1; j <= n; j++)
            {
                if (visit[j] == 0 && dist[j] > cost[k][j])
                {
                    dist[j] = cost[k][j];//更新dist
                }
            }
        }
    }
    cout << sum << endl;
    return 0;
}
 

这个是用cost二维数组存储花费, dist存放距离,用动态规划的方法来寻找最小花费的距离

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m