관리 메뉴

기억을 위한 기록들

미로탐색(DFS) 본문

Coding Test - cpp/DFS

미로탐색(DFS)

에드윈H 2021. 1. 8. 17:12
#include <iostream>
using namespace std;
int map[10][10];
int ch[10][10];
int cnt = 0;

int dx[4] = { 1, 0, -1, 0 };
int dy[4] = { 0, 1, 0, -1 };

void D(int x, int y)
{
	int xx;
	int yy;

	if (x == 6 && y == 6)
		cnt++;
	else {
		for (int index = 0; index < 4; index++) //4방향검사
        {
			xx = x + dx[index]; //4방향 위치
			yy = y + dy[index];
			if (xx < 0 || xx>6 || yy < 0 || yy>6) //범위 벗어남
				continue;

			if (map[xx][yy] == 0 && ch[xx][yy] == 0)  //갈수 있는위치
            {
				ch[xx][yy] = 1; //표시
				D(xx, yy); // 다음위치
				ch[xx][yy] = 0; //표시 해제
			}
		}
	}



}
int main()
{
	int i, j;
	for (i = 0; i < 7; i++) {
		for (j = 0; j < 7; j++) {
			scanf("%d", &map[i][j]);
		}
	}
	ch[0][0] = 1;
	D(0, 0);


	if (cnt == 0) {
		cout << -1 << endl;
	}
	cout << cnt << endl;

	return 0;
}