著名的折纸问题:给你一张很大的纸,对折以后再对折,再对折……每次对折都是从右往左折,因此在折了很多次以后,原先的大纸会变成一个窄窄的纸条。现在把这个纸条沿着折纸的痕迹打开,每次都只打开“一半”,即把每个痕迹做成一个直角,那么从纸的一端沿着和纸面平行的方向看过去,会看到一条美妙的曲线。
就是一个分形,规定一下,纸的朝向,然后不难发现规律。
实现方面,可以迭代也可递归。
在图形输出方面,存下x和y坐标,然后下标排个序,或者用map。
//Rey 2015.8.3#includeusing namespace std;// r -> rl -> open -> ru// -> rlrl -> open -> r ud l -> open -> ru lu// -> rlrlrlrl -> open -> r ud lr ud l -> open -> ru ludr dl -> rulu ldlu// -> rlrlrlrlrlrlrlrl -> r ud lr ud lr ud lr ud l -> ruconst int maxn = 14;const int maxL = (1<<13)+5;int dir[maxL];int Rotate[maxL];int r[maxL];int x[maxL],y[maxL];// up right down left// 0 1 2 3int dx[] = {-1,0,0, 0};int dy[] = { 0,1,0,-1};int mx[] = { 0,0,1, 0};int my[] = { 0,1,0,-1};char decode[] = { '|','_','|','_'};bool cmp(int a,int b) { return x[a] < x[b] || ( x[a] == x[b] && y[a] < y[b] ); }void solve(int n){ int N = (1<