티스토리 뷰
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. 결과
+ 이 방법으로는 이어진 흰 셀에만 작동합니다.
공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.
'C | 자료구조' 카테고리의 다른 글
[C/자료구조] 희소행렬의 표현과 덧셈함수 구현하기 (0) | 2023.10.28 |
---|---|
[C/자료구조] 다항식의 계산 (1) | 2023.10.28 |
[C/자료구조] Ackermann 함수 (0) | 2023.10.27 |
[C] 지뢰 찾기 게임 구현하기 (0) | 2022.10.07 |
[C] C프로그래밍 실습 (3) (0) | 2022.10.06 |
댓글