代码能力题。
我是倒着存的,因为正着存不好确定坐标什么的……不过后来发现这都无所谓
此题最艰难的地方在于如何把给的坐标转换成输出的图的坐标,这个找规律还是蛮蛋疼的,我调这个题用了一个小时,其中大部分时间都在干这个……
顺便,打出来之后用来玩还是挺不错的233
#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
*/