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
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮