Agri-Net--POJ 1258

1、题目类型:图论、最小生成树、Prim算法。

2、解题思路:Prim算法求解最小生成树。

3、注意事项:Prim算法的简单应用。

4、实现方法:

  
    
#include < iostream >
#include
< algorithm >
using namespace std;
#define Max 100000

int n,map[ 101 ][ 101 ];
bool vis[ 101 ];

int Prim()
{
int i,j,pos,ans = 0 ,dis[ 101 ];
memset(vis,
0 , sizeof (vis));

for (i = 0 ;i < n;i ++ )
dis[i]
= map[ 0 ][i];
vis[
0 ] = 1 ;

for (i = 0 ;i < n - 1 ;i ++ )
{
pos
= min_element(dis + 1 ,dis + n) - dis;
vis[pos]
= 1 ;
ans
+= dis[pos];
dis[pos]
= Max;

for (j = 0 ;j < n;j ++ )
if ( ! vis[j] && dis[j] > map[pos][j])
dis[j]
= map[pos][j];
}
return ans;
}

int main()
{
int i,j,ans;
while (scanf( " %d " , & n) != EOF)
{
for (i = 0 ;i < n;i ++ )
for (j = 0 ;j < n;j ++ )
scanf(
" %d " , & map[i][j]);
ans
= Prim();
printf(
" %d\n " ,ans);
}
return 1 ;
}

 

你可能感兴趣的:(poj)