#include #include #include #include #include #include #define D 0 #if D #define _V(_vna, _prf) printf("%s: %"#_prf" (L %d)\n", #_vna, _vna, __LINE__) #else #define _V(_, __) #endif int x1[33], y1[33], x2[33],y2[33], fb[33]; int lx[33], ly[33], lb[33]; int e[33]; int passt(int fo, int la) { return lx[la] > x1[fo] && lx[la] < x2[fo] && ly[la] > y1[fo] && ly[la] < y2[fo]; } int main(C) { int i, j, u; FILE *f=fopen("slides.in","r"); int neues, gibt; while(fscanf(f,"%d", &u),u) { for (i = 0; i < u; i++) { fscanf(f, "%d%d%d%d", x1+i, x2+i, y1+i, y2+i); fb[i] = 0; } for (i = 0; i < u; i++) { fscanf(f, "%d%d", lx+i, ly+i); lb[i] = 0; } for (i = 0; i < u; i++) e[i] = -1; neues = 1; while (neues) { neues = 0; for (i = 0; i < u; i++) if (!fb[i]) { int fm = 0, la; for (j = 0; j < u; j++) if (!lb[j] && passt(i, j)) { fm++; la = j; } _V(i, d); _V(fm, d); _V(la, d); if (fm == 1) { e[i] = la; fb[i] = 1; lb[la] = 1; neues = 1; } } for (i = 0; i < u; i++) if (!lb[i]) { int lm = 0, fo; for (j = 0; j < u; j++) if (!fb[j] && passt(j, i)) { lm++; fo = j; } if (lm == 1) { e[fo] = i; fb[fo] = 1; lb[i] = 1; neues = 1; } } } printf("Heap %d\n", C++); gibt = 0; for (i = 0; i < u; i++) { if (e[i] != -1) { if (gibt) printf(" "); printf("(%c,%d)", i+'A', e[i] + 1); gibt = 1; } } if (!gibt) printf("none"); printf("\n\n"); } return 0; }