#include #define MAX 50 struct TFence { int x1,y1,x2,y2; } fence[MAX]; int xcoord[MAX*2],ycoord[MAX*2]; int nxcoord,nycoord,nofence; int head,tail,queue[MAX*MAX*4]; char map[MAX*2][MAX*2]; void addcord(int coord, int *list, int *listlen) { int i; for(i=0;(i<*listlen) && (coord!=list[i]);i++); if (i==*listlen) list[(*listlen)++]=coord; } int lookup(int coord, int *list) { int i; for(i=0;coord!=list[i];i++); return i; } void addfence(int x1, int y1, int x2, int y2) { struct TFence *p; p=fence+nofence++; addcord(p->x1=x1,xcoord,&nxcoord); addcord(p->y1=y1,ycoord,&nycoord); addcord(p->x2=x2,xcoord,&nxcoord); addcord(p->y2=y2,ycoord,&nycoord); } int intsort(const void *v1, const void *v2) { int *e1=(int*)v1,*e2=(int*)v2; return *e1-*e2; } void swap(int *a, int *b) { int c; c=*a; *a=*b; *b=c; } void add(int x, int y) { if (!(map[y][x]&16)) { map[y][x]|=16; queue[tail++]=y*nxcoord+x; } } void fetch(int *x, int *y) { int i; i=queue[head++]; *x=i%nxcoord; *y=i/nxcoord; } int main(void) { int i,j,w,h,n,x1,y1,x2,y2,dx,dy,x,y,area,max; struct TFence *p; scanf("%d %d %d",&w,&h,&n); nxcoord=nycoord=nofence=max=0; for(i=0;ix1=lookup(p->x1,xcoord); p->y1=lookup(p->y1,ycoord); p->x2=lookup(p->x2,xcoord); p->y2=lookup(p->y2,ycoord); dx=!!(p->x2-p->x1); dy=!!(p->y2-p->y1); x1=p->x1; y1=p->y1; // 1 = left, 2 = bottom, 4 = right, 8 = top while ((x1x2) || (y1y2)) { if (dy) { map[y1][x1]|=1; if (x1>0) map[y1][x1-1]|=4; } else { map[y1][x1]|=2; if (y1>0) map[y1-1][x1]|=8; } x1+=dx; y1+=dy; } } for(i=0;imax) max=area; } printf("Det största området har arean %d kvadratmeter.\n",max); return 0; }