USACO The Castle(二)
ruct gezhi { int west,north,east,south; }node[100][100]; void done(int x,int i,int j) { if(x&(1<<0)) node[i][j].west=1; if(x&(1<<1)) node[i][j].north=1; if(x&(1<<2)) node[i][j].east=1; if(x&(1<<3)) node[i][j].south=1; } bool ck(int x,int y) { if((x>=0&&x
=0&&y
=0;i--) { ///to north if(node[i][j].north) { int X=i-1,Y=j; if(ck(X,Y)) { int color1=g[i][j]; int color2=g[X][Y]; if(color1!=color2) { if(area[color1]+area[color2]>MAXdouble) { MAXdouble=area[color1]+area[color2]; posx=i;posy=j; dir='N'; } } } } ///to east if(node[i][j].east) { int X=i,Y=j+1; if(ck(X,Y)) { int color1=g[i][j]; int color2=g[X][Y]; if(color1!=color2) { if(area[color1]+area[color2]>MAXdouble) { MAXdouble=area[color1]+area[color2]; posx=i;posy=j; dir='E'; } } } } } } printf("%d\n%d\n%d\n%d %d %c\n",num,MAXAREA,MAXdouble,posx+1,posy+1,dir); return 0; }