你自己改改吧。
#include <stdio.h>
#include <math.h>
struct point
{
double x,y
}
struct distence
{
double _distence
bool islink
}
static double CaculateDistence(point x,point y)
{
return sqrt(pow((x.x-y.x),2.0)+pow((x.y-y.y),2.0))
}
static bool isInGroup(int *group,int value)
{
for(int i=0i<10++i)
{
if(value==group[i]){return true}
}
return false
}
int main()
{
/* 初始化各个点的值 */
point _point[10]={{2.4169,8.2119},{4.0391,0.1540},{0.9645,0.4302},{1.3197,1.6899},{9.4205,6.4912},
{9.5613,7.3172},{5.7521,6.4775},{0.5978,4.5092},{2.3478,5.4701},{3.5316,2.9632}}
/* 初始化距离数组 */
distence _distence[10][10]={0.0,0}
////////////////////////////////////////////////////////////////
/* 计算距离 */
int i,j
for (i=0i<10++i)
{
for(j=0j<10++j)
{
if(i==j)_distence[i][j]._distence=0
else _distence[i][j]._distence=CaculateDistence(_point[i],_point[j])
}
}
////////////////////////////////////////////////////////////////////
int pointgroup[10]={0}
int size=1
pointgroup[0]=0
///////////////////////////////////////////////////////////////
/* 计算最小生成树 */
for(size<10)
{
double dismin=32454.0
int tmpx=0,tmpy=0
for(i=0i<size++i)
{
for(j=0j<10++j)
{
if(_distence[pointgroup[i]][j].islink)continue
else if(pointgroup[i]==j)continue
else if(_distence[pointgroup[i]][j]._distence<dismin &&
!isInGroup(pointgroup,j)){
dismin=
_distence[pointgroup[i]][j]._distence
tmpx=pointgroup[i]
tmpy=j
}
else continue
}
}
_distence[tmpx][tmpy].islink=true
_distence[tmpy][tmpx].islink=true
pointgroup[size]=tmpy
++size
}
//////////////////////打印最小生成树//////////////////////////
for(i=0i<10++i)
{
for(int j=0j<10++j)
{
if(_distence[i][j].islink)printf("%d ------ %d\n",i,j)
}
}
return 0
}
/*邻接矩阵存储图
测试数据
6 10
1 2 6
1 3 1
1 4 5
2 3 5
2 5 3
3 4 5
3 5 6
3 6 4
4 6 2
5 6 6
*/
#include <stdio.h>
#include <limits.h>
#define N 100
int p[N], key[N], tb[N][N]
void prim(int v, int n)
{
int i, j
int min
for (i = 1 i <= n i++)
{
p[i] = v
key[i] = tb[v][i]
}
key[v] = 0
for (i = 2 i <= n i++)
{
min = INT_MAX
for (j = 1 j <= n j++)
if (key[j] > 0 && key[j] < min)
{
v = j
min = key[j]
}
printf("%d%d ", p[v], v)
key[v] = 0
for (j = 1 j <= n j++)
if (tb[v][j] < key[j])
p[j] = v, key[j] = tb[v][j]
}
}
int main()
{
int n, m
int i, j
int u, v, w
while (scanf("%d%d", &n, &m))
{
for(i = 1 i <= n i++)
{
for (j = 1 j <= n j++)
tb[i][j] = INT_MAX
}
while (m--)
{
scanf("%d%d%d", &u, &v, &w)
tb[u][v] = tb[v][u] = w
}
prim(1, n)
printf("\n")
}
return 0
}