2019-04-08 과제 (달팽이 직사각형 만들기)

2019. 4. 9. 18:56Layer7

 

1. run에 인자 안넘김 -> 코드 복잡함

2. run에 인자 넘김 -> 코드 간단함

 

 

1. run에 인자 안넘김

#include <stdio.h>

int H = 10, W = 10; 
int array[100 + 2][100 + 2] = { 0 };

void setup();
void run();
void print();

int main()
{
    setup();
    run();
    print();
}

void setup()
{
    printf("x, y 입력 : ");
    scanf("%d %d", &W, &H);
    int _for, __for;
    for(_for = 0;_for < W + 2;_for++)
    {
        array[0][_for] = -1;
        array[H + 1][_for] = -1;
    }
    for(_for = 0;_for < H + 2;_for++)
    {
        array[_for][0] = -1;
        array[_for][W + 1] = -1;
    }
    array[1][1] = 1;
}

void run()
{
    int h, w, num = -1, _for, __for;
    for(_for = 0;_for < H + 2;_for++)
    {
        for(__for = 0;__for < W + 2;__for++)
        {
            if(num < array[_for][__for])
            {
                num = array[_for][__for];
                h = _for;
                w = __for;
            }
        }
    }
    num++;
    if(num > H * W)
    {
        return;
    }
    if(array[h][w + 1] != 0)
    {
        if(array[h + 1][w] != 0)
        {
            if(array[h][w - 1] != 0)
            {
                array[--h][w] = num;
            }
            else
            {
                array[h][--w] = num;
            }
        }
        else
        {
            array[++h][w] = num;
        }
    }
    else if(array[h + 1][w] != 0 && array[h - 1][w] == 0)
    {
        array[--h][w] = num;
    }
    else
    {
        array[h][++w] = num;
    }
    run();
}

void print()
{
    int _for, __for;
    for(_for = 1;_for < H + 1;_for++)
    {
        for(__for = 1;__for < W + 1;__for++)
        {
            printf("%3d ", array[_for][__for]);
        }
        printf("\n");
    }
}
//Scripted By ScriptConverter, using run_prettify.js

 

2. run에 인자 넘김

#include <stdio.h>

void run(int y, int x, int num, int mode);
void print();

int array[100][100] = { 0 }, h_[4] = {0, 1, 0, -1}, w_[4] = {1, 0, -1, 0}, h, w;

int main()
{
    scanf("%d %d", &h, &w);
    run(0, 0, 1, 0);
    print();
}

void run(int y, int x, int num, int mode)
{
    if(num > h * w)
    {
        return;
    }
    if(y >= h || y < 0 || x >= w || x < 0 || array[y][x] != 0)
    {
        y -= h_[mode];
        x -= w_[mode];
        mode = mode == 3 ? 0 : mode + 1;
    }
    else
    {
        array[y][x] = num++;
    }
    run(y + h_[mode], x + w_[mode], num, mode);
}

void print()
{
    int _for, __for;
    for(_for = 0;_for < h;_for++)
    {
        for(__for = 0;__for < w;__for++)
        {
            printf("%3d ", array[_for][__for]);
        }
        printf("\n");
    }
}
//Scripted By ScriptConverter, using run_prettify.js

'Layer7' 카테고리의 다른 글

동적할당과 메모리구조  (0) 2019.04.16
2019-04-08 과제 (정사각형 숫자 대각선 만들기)  (0) 2019.04.09
2019-04-08 과제 (달팽이 정사각형 만들기)  (0) 2019.04.09
포인터 보고서  (0) 2019.04.07
함수 보고서  (0) 2019.04.06