poj 1258 Agri-Net

/* Name: poj 1258 Agri-Net Author: UnimenSun Date: 24/05/11 15:35 Description: 最小生成树裸题 */ /* 解题报告: 最小生成树裸体,适合学习、练习最小生成成树算法 */ #include <iostream> #include <cstring> using namespace std; const int MAXINT = 0x3f3f3f3f; int g[110][110], low[110]; int n; int prim() { int i, j, nMin; int pos, visited[110]; int nResult = 0; memset(visited, 0, sizeof(visited)); //从某点开始,分别标记和记录该点 pos = 1; visited[1] = 1; //第一次给low数组赋值 for(i=1; i<=n; ++i) if(i != pos) low[i] = g[pos][i]; //再运行n-1次 for(i=1; i<n; ++i) { nMin = MAXINT; //找出最小权值并记录位置 for(j=1; j<=n; ++j) { if(visited[j]==0 && nMin>low[j]) { nMin = low[j]; pos = j; } } //标记该点 visited[pos] = 1; //累加权值 nResult += nMin; //更新权值 for(j=1; j<=n; ++j) { if(visited[j]==0 && g[pos][j]<low[j]) low[j] = g[pos][j]; } } return nResult; } int main() { int i, j; while(cin>>n) { for(i=1; i<=n; ++i) for(j=1; j<=n; ++j) cin>>g[i][j]; cout<<prim()<<endl; } return 0; }

你可能感兴趣的:(Date,算法)