입체도

10861 단어 코드 기능
tyvj1009
코드 능력 문제.
나 는 거꾸로 저장했다. 왜냐하면 좌표 따위 를 확정하기 어려웠기 때문 이다. 그러나 나중에 이것 은 모두 상관없다는 것 을 발견했다
이 문제의 가장 어려운 점은 주어진 좌표를 출력된 그림의 좌표로 어떻게 바꾸는가이다. 이것은 규칙을 찾는 데 아직도 매우 아프다. 나는 이 문제를 맞추는 데 한 시간이 걸렸는데 그중 대부분 시간을 이 일을 하고 있다.
겸사겸사 꺼내서 놀기에 괜찮다
#include<cstdio>
#include<iostream>
using namespace std;
int num[233][233];
char map[2333][2333];// :2*n+3*m 
void tc(int x,int y)
{
      map[x][y]='+';  map[x][y+1]='-';  map[x][y+2]='-';  map[x][y+3]='-';  map[x][y+4]='+';
    map[x+1][y]='|';map[x+1][y+1]=' ';map[x+1][y+2]=' ';map[x+1][y+3]=' ';map[x+1][y+4]='|';map[x+1][y+5]='/';
    map[x+2][y]='|';map[x+2][y+1]=' ';map[x+2][y+2]=' ';map[x+2][y+3]=' ';map[x+2][y+4]='|';map[x+2][y+5]=' ';map[x+2][y+6]='+';
    map[x+3][y]='+';map[x+3][y+1]='-';map[x+3][y+2]='-';map[x+3][y+3]='-';map[x+3][y+4]='+';map[x+3][y+5]=' ';map[x+3][y+6]='|';
                    map[x+4][y+1]='/';map[x+4][y+2]=' ';map[x+4][y+3]=' ';map[x+4][y+4]=' ';map[x+4][y+5]='/';map[x+4][y+6]='|';
                    map[x+5][y+2]='+';map[x+5][y+3]='-';map[x+5][y+4]='-';map[x+5][y+5]='-';map[x+5][y+6]='+';
}   
/* +---+.. | |/. | | + +---+ | ./ /| ..+---+ */
int main()
{
    freopen("graph.in","r",stdin);
    freopen("graph.out","w",stdout);
    int n,m,maxn=0,maxm=0;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&num[i][j]);
            int ii=(n-i)*2+1,k=num[i][j];
            maxn=max(maxn,1+3*(k-1)+ii-1+5);
            maxm=max(maxm,1+(j-1)*4+ii-1+6);
        }
    }
    for(int i=maxn;i>=1;i--)
    for(int j=1;j<=maxm;j++)
    {
        map[i][j]='.';
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            for(int k=1;k<=num[i][j];k++)
            {
                int ii=(n-i)*2+1;
                tc(1+3*(k-1)+ii-1,1+(j-1)*4+ii-1);
            }
        }
    }
    int a=1,b=23333333,c=23333333,d=1;  

    for(int i=maxn;i>=1;i--)
    {
        for(int j=1;j<=maxm;j++)
        {
            if(map[i][j]!='.')
            {
                a=max(a,i);
                b=min(b,i);
                c=min(c,j);
                d=max(d,j);
            }
        }
    }   
    for(int i=a;i>=b;i--)
    {
        for(int j=c;j<=d;j++)
        {
            printf("%c",map[i][j]);
        }
        puts("");
    }
    puts("");   
    return 0;
}


/* 1 3 100 100 100 */

좋은 웹페이지 즐겨찾기