웅재의 코딩세상
미로탐색 2 본문
1. 미로의 표현
2차원 배열로 표현한다. -> 0은 길, 1은 벽으로 정의한다.
0 1 0
0 1 1 // -> ㅏ 모양
0 1 0
0 0 0
1 1 1 // -> - 모양
0 0 0
벽 배치 | 코드 | 모양 |
없음 | 0 | |
UP | 1 | ㅣ |
RIGHT | 2 | ㅡ |
UP | RIGHT | 3 | ㄴ |
DOWN | 4 | ㅣ |
UP | DOWN | 5 | ㅣ |
RIGHT | DOWN | 6 | ㄱ(좌우반전) |
UP | RIGHT | DOWN | 7 | ㅏ |
LEFT | 8 | ㅡ |
UP | LEFT | 9 | ㄴ(좌우반전) |
RIGHT | LEFT | 10 | ㅡ |
UP | RIGHT | LEFT | 11 | ㅗ |
DOWN | LEFT | 12 | ㄱ |
UP | DOWN | LEFT | 13 | ㅓ |
RIGHT | DOWN | LEFT | 14 | ㅜ |
UP | RIGHT | DOWN | LEFT | 15 | + |
enum {
UP = 1, // 2^0
RIGHT = 2, // 2^1
DOWN = 4, // 2^2
LEFT = 8, // 2^3
};
int Maze::GetShape(int x, int y){
int shape = 0;
if(m_arrayMaze[y][x] != 0){ // 벽이 있는 경우에만 경우의 수를 따진다.
if(y > 0 && m_arrayMaze[y-1][x] shape |= UP; //위쪽에 벽이 있나
// 위쪽에 벽이 있으면 1이기 때문에 shape와 or 연산을 해준다.
if(y < MAZE_SIZE - 1 && m_arrayMaze[y+1][x] shape |= DOWN; //아래쪽에 벽이 있나
if(x > 0 && m_arrayMaze[y][x-1] shape |= LEFT; //왼쪽에 벽이 있나
if(x < MAZE_SIZE - 1 && m_arrayMaze[y][x+1] shape |= RIGHT; //오른쪽에 벽이 있나
}
} // 주위의 벽 배치에 따라 벽 모양 코드를 리턴한다.
반응형
'개념 > 알고리즘' 카테고리의 다른 글
미로 탐색 : 최단 경로 찾기 (0) | 2023.11.27 |
---|---|
미로 탐색 알고리즘 : 우선법 (1) | 2023.11.26 |
배열의 정의 (미로 탐색 1) (0) | 2023.11.26 |
소수 판별 알고리즘 (1) | 2023.11.23 |
유클리드 알고리즘 (0) | 2023.11.23 |