立体图

· · 个人记录

#include<bits/stdc++.h>
using namespace std;
int m,n,a[505][505],b[52][52],maxx,maxy;
void draw(int x,int y){
    a[x][y]=1;
    a[x-1][y-1]=4;
    a[x-2][y-2]=1;
    a[x-2][y-1]=3;
    a[x-2][y]=3;
    a[x-2][y+1]=1;
    a[x][y+1]=3;
    a[x][y+2]=3;
    a[x][y+3]=1;
    a[x-1][y+2]=4;
    a[x-3][y-2]=2;
    a[x-4][y-2]=2;
    a[x-5][y-2]=2;
    a[x-6][y-2]=1;
    a[x-3][y+1]=2;
    a[x-4][y+1]=2;
    a[x-5][y+1]=2;
    a[x-6][y+1]=1;
    a[x-6][y-1]=3;
    a[x-6][y]=3;
    a[x-5][y+2]=4;
    a[x-1][y+3]=2;
    a[x-2][y+3]=2;
    a[x-3][y+3]=2;
    a[x-4][y+3]=1;
    a[x-1][y+1]=-1;
    a[x-1][y]=-1;
    a[x-3][y]=-1;
    a[x-4][y]=-1;
    a[x-5][y]=-1;
    a[x-3][y-1]=-1;
    a[x-4][y-1]=-1;
    a[x-5][y-1]=-1;
    a[x-2][y+2]=-1;
    a[x-3][y+2]=-1;
    a[x-4][y+2]=-1;
}
void paint(int p){
    if(p==-1) cout<<" ";
    if(p==0) cout<<".";
    if(p==1) cout<<"+";
    if(p==2) cout<<"-";
    if(p==3) cout<<"|";
    if(p==4) cout<<"/";
}
int main(){
    int i,j,maxn=0,add=0;
    cin>>m>>n;
    maxx=n*4+1+2*m;
    maxy=m*2+1;
    for(i=m;i>=1;i--){
        for(j=n;j>=1;j--){
            cin>>b[i][j];
            maxn=max(b[i][j]*3+i*2+1,maxn);
        }
    }
    for(i=m;i>1;i--){
        for(j=1;j<n;j++){
            if(b[i][j]<b[i-1][j]&&b[i][j]<b[i][j+1]) b[i][j]=0;
        }
    }
    while(m>add){
        add++;
        for(i=n;i>=1;i--){
            for(j=1;j<=b[m-add+1][i];j++){
                draw(maxx-i*4+4,maxy+j*3-3);
            }
        }
        maxx-=2;
        maxy-=2;
    }
    for(i=maxn;i>=1;i--){
        for(j=1;j<=n*4+1+2*m;j++) paint(a[j][i]);
        cout<<endl;
    }
}