prim
图论 C++ 公开

avatar 偷狗的林黛玉 发布于 2026-08-01 10:33 更新于 2026-08-01 10:33
返回
prim.cpp
#include <bits/stdc++.h>
using namespace std;

const int N = 100;     // 假设最多有 100 个点
const int INF = 1e9;   // 用一个很大的数表示“没有边”或“距离无限大”

int n;                 // 图中点的数量
int g[N][N];           // 邻接矩阵 g[i][j] 表示 i 到 j 的边的权值
int dis[N];            // dis[i] 表示“点 i 到当前生成树的最小距离”
bool vis[N];           // vis[i] 表示“点 i 是否已经被加入生成树”



int main() {
    cout << "请输入点的数量 n:" << endl;
    cin >> n;

    cout << "请输入邻接矩阵(没有边用很大数或0表示):" << endl;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> g[i][j];
            if (i == j) g[i][j] = INF; // 自己到自己不算边
            if (g[i][j] == 0) g[i][j] = INF; // 若输入0表示无边,则转为INF
        }
    }

    // 初始化每个点到生成树的最短距离为无穷大
    for (int i = 1; i <= n; i++) {
        dis[i] = INF;
        vis[i] = false;
    }

    // 调用 Prim 算法
    int result = prim();

    cout << "最小生成树的总权值为:" << result << endl;

    return 0;
}
/*
4
0 3 5 0
3 0 4 6
5 4 0 2
0 6 2 0

9

*/
wzs_oj@kernel:~ — wzs-sh
guest@wzsoj:~$
刷新页面 F5
复制 Ctrl+C
粘贴 Ctrl+V
搜索题目
站点公告
今日神谕
CSP 倒计时
排行榜
我的提交
Esc 关闭 Enter 跳转 支持模糊匹配数字