HLG 1028 Repeater【图形处理】

题意: 给你个n*n 的位图,让你放大k 倍后输出。

分析: 最终图案的每一部分都是有原图相应位置扩大而来,可以用递归实现。

View Code
#include<stdio.h>
#include<math.h>
#include<string.h>
char a[30][30];
char v[3005][3005];
int n;
void dfs(int k,int x,int y)
{
    int tmp,i,j,tot,l;
    if(k==1)
    {
        for(i=x;i<x+n;i++)
            for(j=y;j<y+n;j++)
                v[i][j]=a[i-x][j-y];
        return;
    }
    tot=1;l=1;
    for(i=1;i<k-1;i++)
        l*=n;
    for(i=0;i<n;i++)
    for(j=0;j<n;j++)
        if(a[i][j]!=' ')
            dfs(k-1,x+l*n*i,y+l*n*j);
}
int main()
{
    int l,i,j,k;
    while(scanf("%d",&n),n)
    {
        getchar();
        for(i=0;i<n;i++)
            gets(a[i]);
        memset(v,' ',sizeof(v));
        scanf("%d",&k);
        l=1;

        for(i=1;i<=k;i++)
            l*=n;
          dfs(k,0,0);

        for(i=0;i<l;i++)
        {
            v[i][l]='\0';
            puts(v[i]);
        }
    }
    return 0;
}

 

posted @ 2012-04-26 23:56  'wind  阅读(161)  评论(0)    收藏  举报