POJ 2083 Fractal(dfs)

来源:互联网 发布:知乎 家族显赫 编辑:程序博客网 时间:2024/05/18 18:03

Fractal
Time Limit: 1000MS Memory Limit: 30000KTotal Submissions: 9938 Accepted: 4567

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

1234-1

Sample Output

X-X X XX X-X X   X X X     XX X   X X   X X    X   X XX X   X X X     XX X   X X-X X   X X         X X   X X X     X           X     XX X   X X         X X   X X   X X               X X    X                 X   X X               X XX X   X X         X X   X X X     X           X     XX 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 XX X   X X         X X   X X X     X           X     XX X   X X         X X   X X   X X               X X    X                 X   X X               X XX X   X X         X X   X X X     X           X     XX X   X X         X X   X X-

Source

Shanghai 2004 Preliminary

思路:这类题观察图形特点,递归输出即可。


AC代码:

#include <iostream>#include <cmath>#include <cstring> using namespace std;const int max_n=729;char G[max_n][max_n];void dfs(int x,int y,int degree){          int s=(int)pow(3,degree-2);          if(degree==1)          {                    G[x][y]='X';                    return ;          }          dfs(x,y,degree-1);          dfs(x+2*s,y,degree-1);          dfs(x+s,y+s,degree-1);          dfs(x,y+2*s,degree-1);          dfs(x+2*s,y+2*s,degree-1);}int main(){          int degree,length;          bool flag;          while(cin>>degree&°ree!=-1)          {                    length=(int)pow(3,degree-1);                    memset(G,' ',sizeof(G));                    dfs(0,0,degree);                    for(int i=0;i<length;i++)                    {                               for(int j=0;j<length;j++)                               {                                        cout<<G[i][j];                                        flag=false;                                        for(int k=j+1;k<length;k++)                                                   if(G[i][k]!=' ')                                                   {                                                             flag=true;                                                             break;                                                    }                                         if(!flag)     break;                                }                                cout<<endl;                      }                      cout<<'-'<<endl;           }           return 0;}


       


原创粉丝点击