prim算法

#include<iostream>
#include<cmath>
using namespace std;
int main(){
    int a[6][6]={{1000,34,46,1000,1000,19},{34,1000,1000,1000,12,1000},{46,1000,1000,17,1000,25},{1000,1000,17,1000,38,25},{1000,12,1000,38,1000,26},{19,1000,25,25,26,1000}};
    int dist[5];
    
    for(int i=1;i<6;i++){
        dist[i]=a[0][i];
    }
    dist[0]=0;
    for(int i=1;i<6;i++){
        int k;
        int p=500;
        for(int j=0;j<6;j++){
            if(dist[j]!=0){
                if(p>dist[j]){
                    p=dist[j];
                    k=j;
                }
            }
        }
        cout<<dist[k]<<" ";
        dist[k]=0;
        
        for(int t=0;t<6;t++){
            if(a[k][t]<dist[t]){
                dist[t]=a[k][t];
            }
        }
    }

}

首先将图形转换为二维数组,里面的1000代表这两个数不能相连,另外其他数字代表这两个点之间的数值

dist是一个辅助数组

先将与v0这个点相连的店初始化到dist数组里面,然后复制dist【0】=0,代表这个点已经被取过了;

然后找出在dist数组中与v0相连最短的那个点,赋值给k,输出dist【k】代表vo到那个点最短的距离;

下面最重要,判断与k与t相连的点与vo直接到t,dist【t】大小

,如果小于dist,那么更新dist

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值