알고리즘 문제풀기/인프런 강의 정답

65. 미로탐색 (2차원 배열 DFS)

코다람쥐 2022. 5. 13. 17:31

나의정답.

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>

using namespace std;

int cnt = 0;
int vRow[4] = { 0,1,0,-1 };
int vCol[4] = { 1, 0, -1, 0 }; // right(0) down(1) left(2) up(3) 
int map[10][10] = { 0 };

void dfs(int row, int col) {	
	if (row == 7 && col == 7) { // 도착지점 (7,7)
		cnt++;
	}
	else if ((row > 7 || col > 7) || (row < 1 || col < 1)) { // (1, 1)~(7, 7)을 벗어나면 함수종료
		return;
	}
	else {
		for (int i = 0; i < 4; i++) {
			if (map[row + vRow[i]][col + vCol[i]] == 1 ) continue;			

			map[row][col] = 1;
			dfs(row + vRow[i], col + vCol[i]);
			map[row][col] = 0;
		}
	}
}

int main(int argc, char** argv) {
	//freopen("input.txt", "rt", stdin);

	for (int i = 1; i <= 7 ; i++) {
		for (int j = 1; j <= 7; j++) {
			scanf("%d", &map[i][j]);
		}
	}
	dfs(1, 1); // 출발지점(1, 1)

	printf("%d", cnt);
}