#include <stdio.h>
const int N = 8;
int maze[8][8] = {
{ 0, 0, 0, 0, 0, 0, 0, 1 },
{ 0, 1, 1, 0, 1, 1, 0, 1 },
{ 0, 0, 0, 1, 0, 0, 0, 1 },
{ 0, 1, 0, 0, 1, 1, 0, 0 },
{ 0, 1, 1, 1, 0, 0, 1, 1 },
{ 0, 1, 0, 0, 0, 1, 0, 1 },
{ 0, 0, 0, 1, 0, 0, 0, 1 },
{ 0, 1, 1, 1, 0, 1, 0, 0 }
};
const static int PATHWAY_COLOR = 0;
const static int WALL_COLOR = 1;
const static int BLOCKED_COLOR = 2;
const static int PATH_COLOR = 3;
int findMazePath(int x, int y)
{
if (x < 0 || y < 0 || x >= N || y >= N){ //좌표가 미로 밖으로 벗어난 경우
return false;
}
else if (maze[x][y] != PATHWAY_COLOR) //입력받은 좌표가 갈 수 있는 길이 아닌 경우
return false;
else if (x == N - 1 && y == N - 1){ //미로 출구인 경우
maze[x][y] = PATH_COLOR;
return true;
}
else{
maze[x][y] = PATH_COLOR;
if (findMazePath(x - 1, y) || findMazePath(x, y + 1) || findMazePath(x + 1, y) || findMazePath(x, y - 1)){
return true;
}
maze[x][y] = BLOCKED_COLOR; //dead end
return false;
}
}
void printMaze(){
for (int i = 0; i < N; i++){
for (int j = 0; j < N; j++){
printf("%2d", maze[i][j]);
}
printf("\n");
}
}
int main()
{
printMaze();
findMazePath(0, 0);
printf("\n");
printMaze();
return 0;
}
'이것저것' 카테고리의 다른 글
백준 1697 숨바꼭질 (0) | 2018.01.13 |
---|---|
visual studio에서 단어 일괄적으로 바꾸는 단축키 (0) | 2017.12.17 |
nqueen 알고리즘 (0) | 2017.10.31 |
백준 14499번 주사위굴리기 (0) | 2017.10.18 |
c++ topological sort (0) | 2017.10.05 |
댓글