1. 程式人生 > >HRBUST - 2347 - 遞歸畫圖 - vj大一上寒假訓練2.11

HRBUST - 2347 - 遞歸畫圖 - vj大一上寒假訓練2.11

ios %d hrbust 遞歸 tdi col main scan ()

技術分享圖片

思路:利用坐標dfs搜索.

註意:1,初始化.2,坐標實時更新(x,y)

代碼:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #define ll long long
 5 using namespace std;
 6 const int amn=1e3+10;
 7 int a,b,con=0;
 8 char mp[amn][amn];char ans[amn][amn];
 9 void solve(int x,int y,int tot)
10 {
11     if
(tot==a) 12 { 13 //cout<<"!"<<endl<<x<<" "<<y<<endl<<"!!"<<endl; 14 for(int k=x;k<tot+x;k++) 15 { 16 for(int l=y;l<tot+y;l++) 17 { 18 if(mp[k-x][l-y]==*) 19 ans[k][l]=
*; 20 } 21 } 22 23 //con++; 24 return; 25 } 26 int tes=tot/a; 27 for(int i=x; i<tot+x; i+=tes)///註意這裏i=x,j=y,找了好久才發現錯誤.... 28 { 29 for(int j=y; j<tot+y; j+=tes) 30 { 31 if(mp[(i-x)/tes][(j-y)/tes]==*) 32 { 33
//cout<<i<<" "<<j<<endl; 34 solve(i,j,tes); 35 } 36 37 } 38 } 39 } 40 int main() 41 { 42 43 while(~scanf("%d%d",&a,&b)) 44 { 45 46 for(int i=0; i<a; i++) 47 { 48 getchar(); 49 for(int j=0;j<a;j++) 50 scanf("%c",&mp[i][j]); 51 } 52 //cout<<"!\n"; 53 int c=1;///註意初始化 54 for(int i=1;i<=b;i++)c*=a; 55 //cout<<c<<endl; 56 for(int i=0; i<c; i++) 57 for(int j=0; j<c; j++) 58 ans[i][j]= ; 59 //cout<<"!!\n"; 60 solve(0,0,c); 61 //cout<<con<<endl; 62 //cout<<"!!!!\n"; 63 for(int i=0; i<c; i++) 64 { 65 for(int j=0; j<c; j++) 66 { 67 printf("%c",ans[i][j]); 68 } 69 70 printf("\n"); 71 } 72 73 puts(""); 74 //cout<<"!!!!!\n"; 75 } 76 }

HRBUST - 2347 - 遞歸畫圖 - vj大一上寒假訓練2.11