prim算法:
#include <iostream> using namespace std; #define MaxSize 27 typedef struct node { int x;bool vist; }point; point p[MaxSize],mst[MaxSize]; void prim(int dist[][MaxSize],int n,int ∑) { int i,j; p[0].vist=true; memset(mst,0,sizeof(mst)); mst[0]=p[0]; int t=n-1; int c=0; int min,min_j; while (t--) { for (i=0,min=9999999,min_j=0;i<=c;i++) { for (j=0;j<n;j++) { if (p[j].vist==true) { continue; } if (dist[mst[i].x][j]<min) { min=dist[mst[i].x][j];min_j=j; } } } p[min_j].vist=true; mst[++c]=p[min_j]; sum+=min; } } int main() { int n; char a; int d; int num; int i,j; int map[MaxSize][MaxSize]; int s; while (cin>>n&&n) { for (i=0;i<n;i++) { for (j=0;j<n;j++) { map[i][j]=99999999; } p[i].x=i;p[i].vist=false; } int t=n-1; while (t--) { cin>>a>>num; i=a-'A'; while (num--) { cin>>a>>d; j=a-'A'; map[i][j]=d; map[j][i]=d; } } s=0; prim(map,n,s); cout<<s<<endl; } return 0; }