uva806 spatial structures 空间结构

2019-04-15 15:17发布

/*pic保存图片信息 然后就是递归难度不高欢迎交流 欢迎指出可以改进的地方///看不懂也可以留言啊~~~我编程习惯不太好改进空间很大。下面是AC代码*/#include #include #include #include #include #include using namespace std; int n,cnt; bool pic[65][65]; int mem[20000]; bool isblack(int r,int l,int u,int d){ for(int i=r;i<=l;i++){ for(int j=u;j<=d;j++){ if(pic[i][j]==true)return false; } } return true; //white return true; true is white; } bool iswhite(int r,int l,int u,int d){ for(int i=r;i<=l;i++){ for(int j=u;j<=d;j++){ if(pic[i][j]==false)return false; } } return true; //black return true; true is white; } void find(int r,int l,int u,int d,int value,int depth){ if(isblack(r,l,u,d)){ mem[cnt++]=value; return; } else if(iswhite(r,l,u,d)){ return; } else if(r==l)return; else{ find(r,r+(l-r)/2,u,u+(d-u)/2,value+1*pow(5,depth),depth+1); find(r+(l-r)/2+1,l,u,u+(d-u)/2,value+2*pow(5,depth),depth+1); find(r,r+(l-r)/2,u+(d-u)/2+1,d,value+3*pow(5,depth),depth+1); find(r+(l-r)/2+1,l,u+(d-u)/2+1,d,value+4*pow(5,depth),depth+1); } } void outpic(int r,int l,int u,int d){ for(int i=r;i<=l;i++){ for(int j=u;j<=d;j++){ if(pic[i][j])cout<<"."; else cout<<"*"; } cout<<" "; } } void paint(int r, int l, int u, int d){ for(int i=r;i<=l;i++){ for(int j=u;j<=d;j++){ pic[j][i]=false; } } } void in(int a){ int r=0,l=-n-1,u=0,d=-n-1; int r1,l1,d1,u1; while(a!=0){ int k; k=a%5; a/=5; if(k==1){ r1=r; l1=r+(l-r)/2; u1=u; d1=u+(d-u)/2; } else if(k==2){ r1=r+(l-r)/2+1; l1=l; u1=u; d1=u+(d-u)/2; } else if(k==3){ r1=r; l1=r+(l-r)/2; u1=u+(d-u)/2+1; d1=d; } else if(k==4){ r1=r+(l-r)/2+1; l1=l; u1=u+(d-u)/2+1; d1=d; } r=r1; l=l1; u=u1; d=d1; } paint(r,l,u,d); } int main(){ int count=1; //freopen("t.in","r",stdin); //freopen("t.out","w",stdout); while(cin>>n&&n!=0){ memset(pic,true,sizeof(pic)); memset(mem,0,sizeof(mem)); if(count!=1)cout<<" "; cout<<"Image "<0){ cnt=0; int j=0; int i=0; for(i=0;i>tem; pic[j][i]=!(tem-48); } } //outpic(0,n-1,0,n-1); find(0,n-1,0,n-1,0,0); sort(mem,mem+cnt); if(cnt){ for(int k=0;k