#include #include int n; struct rect { int x; int y; rect* LP; rect* HD; }; void minbodLP (rect* bod, rect* pole) { int ins = -1; int pom = 20001; int i,c,a,b; for (i =0;iy)) && ((pole[i].x) != (bod->x)) && ((pole[i].LP) == NULL)) { a = pole[i].x; b = bod->x; c = abs(a-b); if (c < pom) { ins = i; pom = c; } } bod->LP = &pole[ins]; pole[ins].LP = bod; } void minbodHD (rect* bod, rect* pole) { int ins = -1; int pom = 20001; int i,c,a,b; for (i =0;ix)) && ((pole[i].y) != (bod->y)) && (pole[i].HD == NULL)) { a = pole[i].y; b = bod->y; c = abs(a-b); if (c < pom) { ins = i; pom = c; } } bod->HD = &pole[ins]; pole[ins].HD = bod; } int main() { rect* bod; rect* pombod; int i,j,minx,maxx,miny,maxy; bool h; minx = miny = 10001; maxx = maxy = -10001; scanf("%d\n",&n); while (n!=0) { bod = new struct rect[n]; for (i = 0;i < n;i++) { scanf ("%d %d\n",&(bod[i].x),&(bod[i].y)); bod[i].HD = bod[i].LP = NULL; if (bod[i].x < minx) minx = bod[i].x; if (bod[i].x > maxx) maxx = bod[i].x; if (bod[i].y < miny) miny = bod[i].y; if (bod[i].y > maxy) maxy = bod[i].y; } for (i=minx; ix)||((bod[i].x == pombod->x) && bod[i].y < pombod->y)) pombod = &(bod[i]); } h = true; while (pombod != bod) { if (h) pombod = pombod->HD; else pombod = pombod->LP; h = !h; } do { if(h) { if (pombod->y < (pombod->HD)->y) printf("N"); else printf("S"); pombod = pombod->HD; } else { if (pombod->x < (pombod->LP)->x) printf("E"); else printf("W"); pombod = pombod->LP; } h = !h; } while (pombod != bod); printf("\n"); delete [] bod; scanf("\n%d\n",&n); } return 0; }