标签:杭电 1102 constructing roads 最小生成树
3 0 990 692 990 0 179 692 179 0 1 1 2
179
这道题也是用的最小生成树做的
代码:
#include<stdio.h>
#include<string.h>
#define INF 1 << 30
int map[101][101] ;
int dis[101] ;
int used[101] ;
void prim( int N )
{
for(int k = 1 ; k <= N ; k++)
{
dis[k] = map[1][k] ;
used[k] = 0 ;
}
int sum = 0 ;
for(int i = 1 ; i <= N ; i++ )
{
int min = INF ;
int c = 0 ;
for(int j = 1 ; j <= N ; j++ )
{
if(!used[j] && dis[j] < min )
{
min = dis[j] ;
c = j ;
}
}
used[c] = 1 ;
for(j = 1 ; j <= N ; j++)
{
if(!used[j] && dis[j] > map[c][j])
dis[j] = map[c][j] ;
}
}
for(i = 1 ; i <= N ; i++)
sum += dis[i] ;
printf("%d\n", sum);
}
int main()
{
int N = 0 ;
while(~scanf("%d" , &N))
{
memset(map , 0 , sizeof(map) ) ;
for(int i = 1 ; i <= N ; i++)
{
for(int j = 1 ; j <= N ; j++)
{
scanf("%d" , &map[i][j]) ;
}
}
int Q = 0 ;
scanf("%d" , &Q) ;
int x = 0 , y = 0 ;
for( int m = 1 ; m <= Q ; m++ )
{
scanf("%d%d" , &x , &y ) ;
map[x][y] = map[y][x] = 0 ;//已经建好的树不用再建了
}
prim( N ) ;
}
return 0 ;
}
标签:杭电 1102 constructing roads 最小生成树
原文地址:http://blog.csdn.net/bluedream1219/article/details/37995881