Minimum Spanning Tree of coordinate type
Note that all distance values are double, and all int values are _ int64.
[Csharp]
# Include "stdio. h"
# Include "math. h"
# Include "string. h"
# Define INF 100000000
Double map [1001] [1001], f [1001];
Int mark [1001], n;
Void prime ()
{
_ Int64 I, j, k;
Double min, ans;
Memset (mark, 0, sizeof (mark ));
For (I = 1; I <= n; I ++)
F [I] = map [1] [I];
F [1] = 0;
Mark [1] = 1;
Ans = 0;
For (I = 1; I <n; I ++)
{
Min = INF;
For (j = 1; j <= n; j ++)
{
If (! Mark [j] & f [j] <min)
{
Min = f [j]; k = j;
}
}
Ans + = min;
Mark [k] = 1;
For (j = 1; j <= n; j ++)
{
If (! Mark [j] & map [k] [j] <f [j])
F [j] = map [k] [j];
}
}
Printf ("%. 2f \ n", ans );
}
Int main ()
{
_ Int64 m, I, j, x [1001], y [1001], a, B;
While (scanf ("% I64d % I64d", & n, & m )! =-1)
{
Memset (map, 76, sizeof (map ));
For (I = 1; I <= n; I ++)
Scanf ("% I64d % I64d", & x [I], & y [I]);
For (I = 1; I <= n; I ++)
{
For (j = I + 1; j <= n; j ++)
Map [j] [I] = map [I] [j] = sqrt (x [I]-x [j]) * (x [I]-x [j]) + (y [I]-y [j]) * (y [I]-y [j]);
}
For (I = 0; I <m; I ++)
{
Scanf ("% I64d % I64d", & a, & B );
Map [a] [B] = map [B] [a] = 0;
}
Prime ();
}
Return 0;
}
Author: yyf572132811