#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