poj 2083 Fractal

http://poj.org/problem?id=2083

Fractal

Description

A fractal is an object or quantity that displays self-similarity, in a somewhat technical sense, on all scales. The object need not exhibit exactly the same structure at all scales, but the same "type" of structures must appear on all scales. 
A box fractal is defined as below : 
  • A box fractal of degree 1 is simply 

  • A box fractal of degree 2 is 
    X X 

    X X 
  • If using B(n - 1) to represent the box fractal of degree n - 1, then a box fractal of degree n is defined recursively as following 
    B(n - 1)        B(n - 1)
    
            B(n - 1)
    
    B(n - 1)        B(n - 1)

Your task is to draw a box fractal of degree n.

Input

The input consists of several test cases. Each line of the input contains a positive integer n which is no greater than 7. The last line of input is a negative integer −1 indicating the end of input.

Output

For each test case, output the box fractal using the 'X' notation. Please notice that 'X' is an uppercase letter. Print a line with only a single dash after each test case.

Sample Input

1
2
3
4
-1

Sample Output

X
-
X X
 X
X X
-
X X   X X
 X     X
X X   X X
   X X
    X
   X X
X X   X X
 X     X
X X   X X
-
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
   X X               X X
    X                 X
   X X               X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
         X X   X X
          X     X
         X X   X X
            X X
             X
            X X
         X X   X X
          X     X
         X X   X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
   X X               X X
    X                 X
   X X               X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
-

一共7组, 打表,将图案存到数组里

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <limits>
#include <queue>
#include <stack>
#include <vector>
#include <map>

using namespace std;
typedef long long LL;

#define N 1750
#define INF 0x3f3f3f3f
#define PI acos (-1.0)
#define EPS 1e-5
#define met(a, b) memset (a, b, sizeof (a))

char str[N][N];
int h;

void Init ()
{
    met (str, ' ');
    str[1][0] = 'X';

    int hh = 1;
    for (int i=2; i<=7; i++)
    {
        for (int j=1; j<=hh; j++)
        {
            for (int k=0; k<hh; k++)
            {
                str[j][k+2*hh] = str[j][k];
                str[j+hh][k+hh] = str[j][k];
                str[j+2*hh][k] = str[j][k];
                str[j+2*hh][k+2*hh] = str[j][k];
            }
        }
        hh *= 3;
    }
}

int main ()
{
    int n;
    Init ();

    while (scanf ("%d", &n), n!=-1)
    {
        h = (int)pow (3.0, n-1);

        for (int i=1; i<=h; i++)
        {
            for (int j=0; j<h; j++)
            printf ("%c", str[i][j]);
            puts ("");
        }
        puts ("-");
    }
    return 0;
}

DFS搜索

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <limits>
#include <queue>
#include <stack>
#include <vector>
#include <map>

using namespace std;
typedef long long LL;

#define N 1750
#define INF 0x3f3f3f3f
#define PI acos (-1.0)
#define EPS 1e-5
#define met(a, b) memset (a, b, sizeof (a))
#define Lson rt<<1, l, tree[rt].mid()
#define Rson rt<<1|1, tree[rt].mid()+1, r

char str[N][N];
void DFS (int n, int x, int y)
{
    if (n == 1)
    {
        str[x][y] = 'X';
        return;
    }

    int h = (int) pow (3.0, (n-2));

    DFS (n-1, x, y);///左上角
    DFS (n-1, x, y+2*h);///右上角
    DFS (n-1, x+h, y+h);///中间
    DFS (n-1, x+2*h, y);///左下角
    DFS (n-1, x+2*h, y+2*h);///右下角
}

int main ()
{
    int n;
    while (scanf ("%d", &n), n!=-1)
    {
        met (str, ' ');
        DFS (n, 1, 1);

        int h = (int) pow (3.0, (n-1));

        for (int i=1; i<=h; i++)
        {
            for (int j=1; j<=h; j++)
                printf ("%c", str[i][j]);
            puts ("");
        }
        puts ("-");
    }
    return 0;
}


你可能感兴趣的:(poj 2083 Fractal)