prim算法:
#includeusing namespace std;int data[100][100];int d[100];//存放当前的最小距离;int v[100];//标记是否用过;int sum;const int maxint=99999;void shuru(int n){ int a,b,c; for(int i=1;i<=100;i++)//初始化data[][]; for(int j=1;j<=100;j++) data[i][j]=maxint; for(int i=1;i<=n;i++)//初始化d[];使得其值为maxint; d[i]=maxint; while(cin>>a>>b>>c) { data[a][b]=c;//无相边; data[b][a]=c; }}void prim(int n){ d[1]=0;sum=0; memset(v,0,sizeof(v)); for(int i=1;i<=n;i++) { int min=maxint; int k=0; for(int j=1;j<=n;j++) { if(!v[j]&&d[j]<=min) { min=d[j]; k=j; } } sum=sum+min; v[k]=1;//标记已存的顶点标号; for(int g=1;g<=n;g++) //更新d[];由于s的集合多了一个k顶点,下一步比较未标记的顶点 到s的最小距离d【】时,只需要原来的d[j]和data[k][j]比较; if(!v[g]&&d[g]>data[k][g]) d[g]=data[k][g]; } cout<<"一共需要的最小权值为: "< < >n; shuru(n); for(int j=1;j<=n;j++) { for(int i=1;i<=n;i++) cout< <<" "; cout<