題目大意:題目大意是比較明顯的,輸入乙個數n,按題目示意輸出相應的圖形。
題目解法:分形,用dfs以及遞迴。輸出圖形的方式是最後一塊輸出,建立maps陣列,然後更改maps陣列,最後輸出maps陣列就可以了。首先計算一共有多少行列,初始化maps。然後我們可以把b(n)的圖形分為五部分,分別是左上、右上、中心、左下、右下五部分,可以知道這五部分的圖形都是b(n-1),所以遞迴就來了,我們在畫b(n)圖形的時候可以通過在這五部分畫b(n-1)的影象來實現,同樣在畫b(n-1)的時候可以通過畫b(n-2)的圖形來實現,最後直到畫b(1)的影象,然後return,最後maps即更新為結果。
題目**:
#include
char maps[
1010][
1010];
intx3
(int n)
return ans;
}void
dfs(
int n,
int x,
int y)
int d=
x3(n-2)
;dfs
(n-1
,x,y)
;dfs
(n-1
,x,y+
2*d)
;dfs
(n-1
,x+d,y+d)
;dfs
(n-1
,x+2
*d,y)
;dfs
(n-1
,x+2
*d,y+
2*d);}
intmain()
printf
("-\n");
}return0;
}
POJ 2083 Fractal(經典遞迴)
題目鏈結 比較經典的題,但是自己沒寫出來,有必要反思一下。圖案的遞迴其實比較容易的,關鍵是如何輸出空格,如果把空格當成另外的分塊,換行又沒辦法解決 其實這裡的處理方法很巧妙,先將最大範圍內填充空格,使用fil l fill fill 然後設dfs cur x,y dfs cur,x,y dfs cu...
Fractal (第一場 遞迴與回溯)
分形遞迴 進三個變數,n和橫縱座標 d是圖形每次變換的長度,每次座標定位到左上角,分成左上,左下,右上,右下,中。可知,左上座標不變,右上橫座標加兩個圖形長度,縱座標不變。同理,其它位置也可以模擬出來。邊界條件是n 1,只有 x intf int n,int x,int y else 冪函式 int...
poj3845 Fractal(座標旋轉)
傳送門 題意 給一條折線,每一次操作把這條折線的所有線段變換成跟這條折線的相同形狀,重複d次。問此時從頭到尾走全長的f 0 f 1 將停在哪個點上。題解 首先計算出每次變換線段增長的倍數 k 那麼線段會增長kd 若當前線段增長後已經超出了所剩餘的長度,就相當於確定變換後的直線在當前線段上,那麼遞迴k...