이 문제 어떻게 푸나요?

안녕하세요. 제가 지금 상업경진대회 종목 중 하나인 비즈니스 프로그래밍의 기출문제를 (취미로) 풀어보고 있는데, 이게 해설이 없더라고요. 그래서 문제 하나에서 막혔는데 제 머리로는 안될 거 같아서 누군가가 풀어주신다면 감사한 마음으로 이해하려고 노력해보겠습니다.
문제는 아래와 같습니다.
캡처

입력은 JS로 할 것이기 때문에

< C >
3
0 0 1
1 0 1
1 0 0
=>

functionName(3,[0,0,1],[1,0,1],[1,0,0]);

로 처리해주세요.

문제를 풀어주시는 분은 복 받으실 거에요.

이런 스타일 문제를 처음풀어봐서 조금 허접하지만 ^^;;
퍼즐 성공여부만 풀어봤어요

this.map = [[0, 1, 0, 0, 0],[0, 0, 0, 1, 0],[1, 1, 1, 0, 0],[0, 0, 0, 0, 1],[1, 1, 1, 0, 0]];
//this.map = [[0, 0, 0, 0],[1, 0, 1, 1],[1, 1, 0, 1],[0, 0, 0, 0]];
//this.map = [[0, 0, 1],[1, 0, 1],[1, 0, 0]];

this.Button00_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var rtn = this.fnCheckGoal(3, 0, 0, 0, 0);
};

this.fnCheckGoal = function(n, x_prev, y_prev, x, y)
{
	var rtn1 = rtn2 = rtn3 = rtn4 = 0;
	
	if(x==(n-1)&&y==(n-1))
	{
		if(this.map[x][y]==0)return 1;
		else return 0;
	}else
	{
		if(x+1!=n&&!(x_prev==x+1&&y_prev==y)&&this.map[x+1][y]==0)
		{
			rtn1 = this.fnCheckGoal(n, x, y, x+1, y);
		}
		
		if(x-1!=-1&&!(x_prev==x-1&&y_prev==y)&&this.map[x-1][y]==0)
		{
			rtn2 = this.fnCheckGoal(n, x, y, x-1, y);
		}
		
		if(y-1!=-1&&!(x_prev==x&&y_prev==y-1)&&this.map[x][y-1]==0)
		{
			rtn3 = this.fnCheckGoal(n, x, y, x, y-1);
		}
		
		if((y+1!=n)&&!(x_prev==x&&y_prev==y+1)&&this.map[x][y+1]==0)
		{
			rtn4 = this.fnCheckGoal(n, x, y, x, y+1);
		}
	}
	
	if(rtn1 + rtn2 + rtn3 + rtn4 > 0)return 1
	else return 0;
}

시간이 많이 지났지만… 결론적으로 말하면 BFS 또는 DFS 알고리즘으로 풀 수 있습니다. @gamwizard 님이 풀어주신 방법에서 추가적으로 한번 방문했는지 여부를 별도의 배열에 체크해서 재방문하지 않도록 처리해주면 DFS 알고리즘 풀이가 되고, 재귀함수를 사용하지 않고 큐를 사용해서 주변 방문을 처리하면 BFS 알고리즘이 됩니다.