입체도
10861 단어 코드 기능
코드 능력 문제.
나 는 거꾸로 저장했다. 왜냐하면 좌표 따위 를 확정하기 어려웠기 때문 이다. 그러나 나중에 이것 은 모두 상관없다는 것 을 발견했다
이 문제의 가장 어려운 점은 주어진 좌표를 출력된 그림의 좌표로 어떻게 바꾸는가이다. 이것은 규칙을 찾는 데 아직도 매우 아프다. 나는 이 문제를 맞추는 데 한 시간이 걸렸는데 그중 대부분 시간을 이 일을 하고 있다.
겸사겸사 꺼내서 놀기에 괜찮다
#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 */