// 2008アジア地区予選J : Zigzag #include #include #include #include #include #include using namespace std; const double EPS = 1e-8; typedef complex P; struct L { P p, q; L(P p, P q) : p(p), q(q) {} }; class Node{ public: int b, p, q, num; double len; Node(int b, int p, int q, int num, double len) : b(b), p(p), q(q), num(num), len(len) {} bool operator < (const Node &nd) const { return make_pair(num, len) > make_pair(nd.num, nd.len); } }; double dot(P a, P b) { return real(conj(a)*b); } double cross(P a, P b) { return imag(conj(a)*b); } P ssCrosspoint(L a, L b){ double A = cross(a.q-a.p, b.q-b.p); double B = cross(a.q-a.p, a.q-b.p); return b.p + B/A * (b.q-b.p); } int main(){ ifstream cin("J.in"); int n; int bit[10][10]; int num[1024][10][10]; double len[1024][10][10]; while(cin >> n, n){ memset(num, -1, sizeof(num)); priority_queue qu; vector

vp(n); for(int i=0;i> x >> y; vp[i] = P(x, y); } for(int i=0;i res; while(!qu.empty()){ Node nd = qu.top(); qu.pop(); if(nd.b == (1<abs(p-l.p)||abs(p-vp[j])>abs(p-vp[i])) continue; qu.push(Node(nd.b|bit[i][j], j, i, nd.num+1, nd.len+abs(p-l.q)+abs(p-vp[i]))); } } } printf("%d %.8lf\n", res.first, res.second); } }