#include #include #include #include #include #include #include #include #define MAXV 1001 struct corner { int x, y; int next; int dir; int already; }; int ni; struct corner polygon[MAXV]; int additions[4][2] = { { -1, 0}, { 0, 1}, { 1, 0}, { 0,-1} }; int find_up(int current) { int y= polygon[current].y; int maxy = INT_MIN; int maxyi = INT_MAX; int i; for (i=0; i maxy) { maxy = polygon[i].y; maxyi = i; } return maxyi; } int find_down(int current) { int y= polygon[current].y; int miny = INT_MAX; int minyi = INT_MAX; int i; for (i=0; i y && polygon[i].y < miny) { miny = polygon[i].y; minyi = i; } return minyi; } int find_left(int current) { int y= polygon[current].x; int maxy = INT_MIN; int maxyi = INT_MAX; int i; for (i=0; i maxy) { maxy = polygon[i].x; maxyi = i; } return maxyi; } int find_right(int current) { int y= polygon[current].x; int miny = INT_MAX; int minyi = INT_MAX; int i; for (i=0; i y && polygon[i].x < miny) { miny = polygon[i].x; minyi = i; } return minyi; } int find_next(int current, int direction) { if (direction == 0) return find_up(current); if (direction == 1) return find_right(current); if (direction == 2) return find_down(current); if (direction == 3) return find_left(current); return INT_MAX; } int first; void calculate_path(int ni) { int miny, minx; int minyi, minxi; int i; int current; int direction; /* 0 up, 1 right, 2 down, 3 left */ miny = INT_MAX; for (i=0; i