#include <stdio.h> #include <stdlib.h> #include <math.h> double x[1000], y[1000]; double dist(int i, int j) { return sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j])); } double angle(double x1, double y1, double x2, double y2) { double a = atan2(y2 - y1, x2 - x1); double pi = atan2(0, -1); if (a < 0) a = 2*pi + a; return a; } double angledistance(int i, int j, int k) { double ad = angle(x[j], y[j], x[k], y[k]) - angle(x[i], y[i], x[j], y[j]); double pi = atan2(0, -1); while (ad > 2*pi) ad = ad - 2*pi; while (ad < 0) ad = ad + 2*pi; return ad; } void main(void) { int z, k, n, i, b, b0, c, d; float xx, yy; double peri; scanf ("%d\n", &z); for (k = 1; k <= z; k ++) { scanf ("%d\n", &n); for (i = 0; i < n; i ++) { scanf ("%f %f\n", &xx, &yy); x[i] = (double) xx; y[i] = (double) yy; } for (i = 0, b = 0; i < n; i ++) if (y[i] < y[b] || (y[i] == y[b] && x[i] < x[b])) b = i; b0 = b; for (i = 0, c = -1; i < n; i ++) if (i != b && (c == -1 || angle(x[b], y[b], x[i], y[i]) < angle(x[b], y[b], x[c], y[c]))) c = i; peri = dist(b, c); while (c != b0) { for (i = 0, d = -1; i < n; i ++) if (i != b && i != c && (d == -1 || angledistance(b, c, i) < angledistance(b, c, d))) d = i; peri += dist(c, d); b = c; c = d; } printf ("Data set %d: %.3f\n", k, peri); } }