题意:
给出一个各个节点之间权值的对应图,求这个图的最小生成树
题解:
Prime算法的裸题。
代码:
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <cmath>
using namespace std ;
#define INF 0x3f3f3f3f
#define MAX 110
int n ;
bool visit[MAX] ;
int cost[MAX][MAX] ;
int Prime()
{
int ans = 0 ;
int t = n ;
memset(visit , false , sizeof(visit)) ;
visit[0] = true ;
//for(int i = 1 ; i < n ; i ++) lowc[i] = cost[0][i] ;
while(t --)
{
int minc = INF ;
int p = -1 ;
for(int j = 1 ; j < n ; j ++)
{
if(!visit[j] && minc > cost[0][j])
{
minc = cost[0][j] ;
p = j ;
}
}
if(minc == INF)
{
break ;
}
ans += minc ;
visit[p] = true ;
for(int j = 1 ; j < n ; j ++)
{
if(!visit[j] && cost[p][j] < cost[0][j])
{
cost[0][j] = cost[p][j] ;
}
}
}
if(t == 0)
printf("%d\n", ans);
else
printf("oh!\n");
}
int main(int argc, char const *argv[])
{
while(scanf("%d" , &n)!= EOF)
{
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < n ; j ++)
scanf("%d" , &cost[i][j]) ;
Prime() ;
}
return 0;
}