// UVa 10687 - Monitoring the Amazon #include <iostream> #include <limits.h> // only to use INT_MAX as infinity #include <string.h> // only to use memset using namespace std; struct point { int x, y; }; int dist(point p1, point p2) { return (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y); } int lnk[1000][2]; bool visited[1000]; int count(int i) { if (visited[i]) return 0; visited[i] = true; return count(lnk[i][0]) + count(lnk[i][1]) + 1; } int main() { int n; while (cin >> n && n) { point p[1000]; // read input for (int i = 0; i < n; i++) cin >> p[i].x >> p[i].y; // see who is connected to who for (int i = 0; i < n; i++) { int mina = INT_MAX, minb = INT_MAX; int ca = -1, cb = -1; for (int j = 0; j < n; j++) if (i != j) { int d = dist(p[i], p[j]); if (d <= mina) { minb = mina; mina = d; cb = ca; ca = j; } else if (d < minb) { minb = d; cb = j; } } lnk[i][0] = ca; lnk[i][1] = cb; } // see if the graph is connected memset(visited, false, sizeof(visited)); if (count(0) == n) cout << "All stations are reachable.\n"; else cout << "There are stations that are unreachable.\n"; } return 0; }
Wednesday, September 9, 2015
UVa 10687 - Monitoring the Amazon
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment