poj 1258

来源:互联网 发布:暗黑2优化的高清补丁 编辑:程序博客网 时间:2024/05/21 10:59

简单题,直接用prim算法就可以啦.

#include <iostream>#include <cstdio>#include <cstring>const int maxn = 110;using namespace std;int map[maxn][maxn];bool flag[maxn];int Prim(int n){    int t = n;    int k,ans = 0;    while(--t){        int MIN = 1000000;        for(int i = 2; i <= n; ++i)            if(!flag[i] && MIN > map[1][i]){                 MIN =  map[1][i];                 k = i;            }         flag[k] = true;         ans += MIN;         for(int i = 2; i <= n; ++i)             if(!flag[i] && map[k][i] < map[1][i])                  map[1][i] = map[k][i];    }        return ans;}int main(){    int n;    while(~scanf("%d",&n)){          memset(flag,false,sizeof(flag));          for(int i = 1; i <= n; ++i)            for(int j = 1; j <= n; ++j)              scanf("%d",&map[i][j]);           printf("%d\n",Prim(n));    }    return 0;}