본문 바로가기
이것저것

미로찾기 문제 소스

by 문자메일 2017. 10. 31.

#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

댓글