因为从俯视图看,输入输出的视角是从右下方看向左上方的
所以左上角的正方体最有可能被其他正方体挡住
立体上,底部的正方体最有可能被顶部的正方体挡住
所以绘图应该从后往前,从下往上绘制
剩下的就是一大堆计算和判断了
采用的是先绘制出规范的图再与输入的图做对比的方式
1 /* 2 Written By StelaYuri 3 */ 4 #include<stdio.h> 5 #include<string.h> 6 int n,m,ar[21][21]; 7 char ori[200][200],bd[200][200],node[6][8]={ 8 "..+---+", 9 "./ /|", 10 "+---+ |", 11 "| | +", 12 "| |/.", 13 "+---+.." 14 }; 15 void dr(int x,int y){ 16 int i,j; 17 for(i=0;i<6;i++) 18 for(j=0;j<7;j++) 19 if(node[i][j]!=‘.‘) 20 bd[x+i][y+j]=node[i][j]; 21 } 22 int main(){ 23 int i,j,h=-1,w,x,y; 24 scanf("%d%d",&n,&m); 25 for(i=0;i<n;i++) 26 for(j=0;j<m;j++) 27 scanf("%d",&ar[i][j]); 28 getchar(); 29 while(gets(ori[++h])); 30 w=strlen(ori[0]); 31 for(i=0;i<h;i++) 32 memset(bd[i],‘.‘,w); 33 for(i=0;i<n;i++) 34 for(j=0;j<m;j++){ 35 x=h-(4+2*n)+2*i; 36 y=(n-1)*2+4*j-2*i; 37 while(ar[i][j]--){ 38 dr(x,y); 39 x-=3; 40 } 41 } 42 for(i=0;i<h;i++) 43 for(j=0;j<w;j++) 44 if(bd[i][j]!=ori[i][j]){ 45 puts("NO"); 46 return 0; 47 } 48 puts("YES"); 49 50 return 0; 51 }
原文地址:https://www.cnblogs.com/stelayuri/p/12235327.html
时间: 2024-10-11 18:42:48