一道递归构造图形的题,做的时候一直TLE,多想想优化才过的。
1 #include <stdio.h> 2 #include <string.h> 3 char map[2500][2500]; 4 char tplt[6][6]; 5 int n; 6 void build(int m, int x, int y) 7 { 8 int i,j,sum = 1; 9 for(i = 1; i < m; i++) sum *= n; 10 if(m == 1) 11 for(i = x; i < x+n; i++) 12 for(j = y; j < y+n; j++) 13 map[i][j] = tplt[i-x][j-y]; 14 else for(i = 0; i < n; i++) 15 for(j = 0; j < n; j++) 16 if(tplt[i][j] != ' ') 17 build(m-1,x+i*sum,y+j*sum); 18 } 19 int main() 20 { 21 int m,i,j,sum; 22 while(scanf("%d",&n),n) 23 { 24 getchar(); 25 memset(map,' ',sizeof map); 26 for(i = 0; i < n; i++) 27 gets(tplt[i]); 28 scanf("%d",&m); 29 build(m,0,0); 30 sum = 1; 31 for(i = 0; i < m; i++) sum *= n; 32 for(i = 0; i < sum; i++) 33 { 34 map[i][sum] = '\0'; 35 for(j = sum-1; j >= 0; j--) 36 if(map[i][j] != ' ') 37 { 38 map[i][j+1] = '\0'; 39 break; 40 } 41 printf("%s\n",map[i]); 42 } 43 } 44 return 0; 45 }