首页 > 代码库 > 最小生成树一·Prim算法

最小生成树一·Prim算法

#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<queue>#include<vector>#include<cstring>#include<cmath>using namespace std;typedef long long ll;#define N 1005#define Max 11111int mmap[N][N];int tem[N];int main(){    int n,len;    while(~scanf("%d",&n)){        for(int i=0; i<n; i++){            for(int j=0; j<n; j++){                scanf("%d",&mmap[i][j]);            }        }        len=0;        for(int i=0; i<n; i++)tem[i]=mmap[0][i];        mmap[0][0]=-1;        for(int kk=1; kk<n; kk++){            int x=Max,y;            //cout<<"!!!"<<endl;            for(int i=0; i<n; i++){                if(mmap[i][0]!=-1&&x>tem[i]){x=tem[i]; y=i;}            }            len+=x;            //cout<<y<<endl;            for(int i=0; i<n; i++)if(mmap[i][0]!=-1)tem[i]=min(tem[i],mmap[y][i]);            mmap[y][0]=-1;        }        printf("%d\n",len);    }    return 0;}

 

最小生成树一·Prim算法