prim算法

来源:互联网 发布:python 字符 编码 编辑:程序博客网 时间:2024/06/06 07:46
#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

1 0