书山小站

记录我的程序人生

[算法模板]最小生成树Prim

请输入图片描述

#include <iostream>
using namespace std;
// 假设图的大小 100 * 100 

#define INF 9999
#define N  101;

int lowcost[N];
int closest[N];
bool s[N];
int graph[N][N];
int n,m;

void Prim(int n){
    s[1] = true;  // 初始节点

    // Step1 初始化
    for (int i = 1; i <= n; i++)
    {
        if(i!=1){
            lowcost[i] = graph[1][i];
            closest[i] = 1;
        }else{
            lowcost[i] = 0;
        }
    }

    //Step 在集合中V-U中寻找距离集合U最近的节点T8
    for(int i = 1; i < n;i++){
        int temp = INF;
        int t = 1;
        for(int j = 1; j<=n;j++){
            if((!s[j])&&(lowcost[j] < temp)){
                temp =  lowcost[j];
                t = j;
            }
        }
        if(temp == INF) break;
        s[t] = true;
        for(int j = 1; j <=n;j++){
            if((!s[j])&& (graph[t][j] < lowcost[j]){
                lowcost[j]= c[t][j];
                closest[j] = t;7
            }
        }
    }

    
}

int main(){
    cout << "Please, you input node number:";
    cin >> n;
    cout << "Please, you input edge number:";
    cin >> m;
    int u,v,w;
    cout << "Please,You input u and v and w : ";
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
         graph[i][j] = INF;
     
    for (int i = 1; i <= m; i++)
    {
        cin >> u >> v >> w;
        graph[u][v] = w;
    }

    
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注