prim算法:从某一点开始,去遍历相邻的边,然后将权值最短的边加入集合,同时将新加入边集中的新点遍历相邻的边更新边值集合(边值集合用来找出新的最小权值边),注意每次更新都需将cost数组中的点对应的权值消0,代表已加入集合;
#include<stdio.h> #include<windows.h> #define maxv 65535 ][]; ]; ]; void minTree(int n){ ;i<n;i++){ arc[i]=; cost[i]=a[][i]>? a[][i]:maxv; } cost[]=; ;i<n;i++){ int min=maxv; ; ; while(j<n){ &&cost[j]<min){ min=cost[j]; k=j; } j++; } printf("(%d %d)\n",arc[k],k); system("pause"); cost[k]=; ;j<=n;j++){ &&a[k][j]>&&a[k][j]<cost[j]){ cost[j]=a[k][j]; arc[j]=k; } } } } int main(){ int n; scanf("%d",&n); ;i<n;i++){ ;j<n;j++){ scanf("%d",&a[i][j]); } } minTree(n); }