最小生成树的Prim算法笔记

来源:互联网 发布:知乎怎么匿名 编辑:程序博客网 时间:2024/05/23 19:18
#include<iostream>using namespace std;const int max=7;const int mm=100;int matrix[max];int edge[max][max];int newedge[max][max];bool visited[max];void insert(int a,int b,int w){edge[a][b]=edge[b][a]=w;}int main(){int i,j;for(i=0;i<max;i++){for(j=0;j<max;j++){edge[i][j]=mm;newedge[i][j]=mm;}}insert(0,1,7);insert(1,2,8);insert(0,3,5);insert(1,3,9);insert(1,4,7);insert(2,4,5);insert(3,4,15);insert(3,5,6);insert(4,5,8);insert(4,6,9);insert(5,6,11);int v=0;matrix[v++]=3;visited[3]=true;while(v<max){int min=mm;int u=0;int start=0;for(i=0;i<v;i++){int k=matrix[i];for(j=0;j<max;j++){if(min>edge[k][j]&&!visited[j]){min=edge[k][j];start=k;u=j;}}}visited[u]=1;matrix[v++]=u;newedge[start][u]=min;}int sum=0;for(i=0;i<max;i++){for(j=0;j<max;j++){if(newedge[i][j]<mm){sum+=newedge[i][j];}}}cout<<"sum="<<sum<<endl;return 0;}
实质是贪心思想的应用。

0 0