poj1258 prim最小生成树

来源:互联网 发布:java全栈工程师是什么 编辑:程序博客网 时间:2024/05/17 09:00
#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<cmath>#include<string>#include<map>#include<set>#include<algorithm>#include<vector>#include<queue>#include<stack>#include<sstream>#define LL long long#define OJ_DEBUG 0#define READ_FILE 0using namespace std;const int NN_MAX = 110;const int MM_MAX = 100010;const int INF = 0x1fffffff;/**********************************************************/int lenEdge,n;int maps[NN_MAX][NN_MAX],minCost[NN_MAX],vis[NN_MAX];/**********************************************************/int min_2 (int x,int y) {return x<y?x:y;}int max_2 (int x,int y) {return x>y?x:y;}int prim();/**********************************************************/int main(){    if (READ_FILE) freopen ("in.txt","r",stdin);    while(scanf("%d",&n)!=EOF)    {        for(int i=1;i<=n;i++)            for(int j=1;j<=n;j++)                scanf("%d",&maps[i][j]);        printf("%d\n",prim());    }    return 0;}int prim(){    int cnt=0;    memset(vis,0,sizeof(vis));    for(int i=0;i<=n;i++) minCost[i]=INF;    minCost[1]=0;    for(int i=1;i<=n;i++){        int x=0;        for(int j=0;j<=n;j++)            if(!vis[j] && minCost[j]<minCost[x])                x=j;        vis[x]=1;        cnt+=minCost[x];        for(int j=1;j<=n;j++)            if(!vis[j])                minCost[j]=min_2(minCost[j],maps[x][j]);    }    return cnt;}

0 0
原创粉丝点击