首页 > 其他 > 详细

Fractal---poj2083(递归和普通方法)

时间:2015-12-07 14:13:37      阅读:224      评论:0      收藏:0      [点我收藏+]

题目链接:http://poj.org/problem?id=2083

这题不能用G++提交...

见到两次知道有递归的写法,然而并不会,这次发现并不难;

技术分享
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;

int len[8]= {0,1}, s[1000][1000];

void dfs(int n, int x, int y)
{
    s[x][y]=1;
    if(n==7)return ;

    int m = len[n];

    dfs(n+1, x, y);///左上
    dfs(n+1, x, y+2*m);///左下
    dfs(n+1, x+2*m, y);///右上
    dfs(n+1, x+m, y+m);///中间
    dfs(n+1, x+2*m, y+2*m);///右下
}

int main()
{
    memset(s, 0, sizeof(s));
    for(int i=2; i<=7; i++)
        len[i]=3*len[i-1];
    dfs(1, 1, 1);
    int n;
    while(scanf("%d", &n), n!=-1)
    {
        for(int i=1; i<=len[n]; i++)
        {
            for(int j=1; j<=len[n]; j++)
            {
                if(s[i][j]==1)printf("X");
                else printf(" ");
            }
            printf("\n");
        }
        printf("-\n");
    }
    return 0;
}
View Code

下面是我写的比较恶心的代码:

技术分享
#include<stdio.h>
#include<string.h>
#define N 903
#define met(a, b) memset(a, b, sizeof(a))

struct node
{
    int len;
    char s[N][N];
}a[8];

void P1(char s[][N], int X1, int X2, int Y1, int Y2, char s0[][N])
{
    for(int i=X1, p=0; i<=X2; i++, p++)
    {
        for(int j=Y1, q=0; j<=Y2; j++, q++)
        {
            s[i][j] = s0[p][q];
        }
    }
}
void P2(char s[][N], int X1, int X2, int Y1, int Y2)
{
    for(int i=X1; i<=X2; i++)
    {
        for(int j=Y1; j<=Y2; j++)
        {
            s[i][j] =  ;
        }
    }
}
void Init()
{
    met(a, 0);
    a[1].s[0][0] = X;
    a[1].len = 1;

    for(int i=2; i<=7; i++)
    {
        int n = a[i-1].len;
        a[i].len = n*3;

        P1(a[i].s, 0, n-1, 0, n-1, a[i-1].s);
        P2(a[i].s, 0, n-1, n, 2*n-1);
        P1(a[i].s, 0, n-1, 2*n, 3*n-1, a[i-1].s);

        P2(a[i].s, n, 2*n-1, 0, n-1);
        P1(a[i].s, n, 2*n-1, n,2*n-1, a[i-1].s);
        P2(a[i].s, n, 2*n-1, 2*n, 3*n-1);

        P1(a[i].s, 2*n, 3*n-1, 0, n-1, a[i-1].s);
        P2(a[i].s, 2*n, 3*n-1, n, 2*n-1);
        P1(a[i].s, 2*n, 3*n-1, 2*n, 3*n-1, a[i-1].s);
    }
}

int main()
{
    Init();
    int n;
    while(scanf("%d", &n), n!=-1)
    {
        for(int i=0; i<a[n].len; i++)
        {
            for(int j=0; j<a[n].len; j++)
                printf("%c",a[n].s[i][j]);
            printf("\n");
        }
        printf("-\n");
    }
    return 0;
}
View Code

 

Fractal---poj2083(递归和普通方法)

原文:http://www.cnblogs.com/zhengguiping--9876/p/5025751.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!