티스토리 뷰

 

C언어를 이용한 자료구조 실습입니다.

 


 

I. 문제

 

위 그래픽을 2차원 배열로 표현하라. 그래픽에서 회색 셀은 2로 표현하고, 흰 셀은 0으로 표현된다.

 

위의 그래픽에서 흰 셀을 검정 셀(1로 표현)로 변경하는 change_color() 알고리즘을 순환적으로 작성하라. 단, 대상 셀이 그래픽 경계를 포함하는 것에 유의해야 한다. 위에서 작성한 알고리즘을 C 함수로 작성하여 테스트하라. 테스트는 영역이 그래픽 경계를 포함하는 경우와 그렇지 않은 경우를 모두 포함해야 한다.

 

 

II. 구현

#include <stdio.h>
#define WHITE 0 
#define BLACK 1 
#define SIZE 8

int screen[SIZE][SIZE] = // 배열 선언 및 초기화
{ {0,0,0,0,2,2,2,2},
 {0,0,0,0,2,2,2,2},
 {2,2,0,0,2,2,2,2},
 {2,2,2,0,0,2,2,2},
 {2,2,0,0,0,2,2,2},
 {0,0,0,0,2,2,2,2},
 {2,2,2,2,2,2,2,2},
 {2,2,2,2,2,2,2,2} };


void change_color(int r, int c){ // 흰색(0) 셀을 검정색(1)으로 변경

    // 값이 흰색이면서, 인덱스 범위를 벗어나지 않는다면
    if (screen[r][c] == WHITE && r >= 0 && c >= 0 && r < 8 && c < 8){
        screen[r][c] = BLACK; // 색 변경

        // 재귀 호출로 주변 셀들을 확인
        change_color(r - 1, c); // 위쪽 
        change_color(r + 1, c); // 아래쪽
        change_color(r, c - 1); // 왼쪽 
        change_color(r, c + 1); // 오른쪽 
    }
}

// 행렬 출력
void print_arr() {
    for (int i = 0; i < SIZE; i++){
        for (int j = 0; j < SIZE; j++)
            printf("%d ", screen[i][j]);
        printf("\n");
    }
}


int main(){
    printf("\n======변경 전======\n");
    print_arr();

    change_color(4, 4); 

    printf("\n======변경 후======\n");
    print_arr(); 

    return 0;
}

 

 

III. 결과

 

+ 이 방법으로는 이어진 흰 셀에만 작동합니다.

 


공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.

댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Total
Today
Yesterday