작성
·
143
0
import java.util.*;
class Main {
static int[] dx={-1, 0, 1, 0};
static int[] dy={0, 1, 0, -1};
static int[][] board;
static int answer=0;
public void DFS(int x, int y){
if(x==7 && y==7) answer++;
else{
for(int i=0; i<4; i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=1 && nx<=7 && ny>=1 && ny<=7 && board[nx][ny]==0){
board[nx][ny]=1;
DFS(nx, ny);
board[nx][ny]=0;
}
}
}
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
board=new int[8][8];
for(int i=1; i<=7; i++){
for(int j=1; j<=7; j++){
board[i][j]=kb.nextInt();
}
}
board[1][1]=1;
T.DFS(1, 1);
System.out.print(answer);
}
}
위 코드에서 board[nx][ny]=0; 부분이 이해가 안됩니다
강의에서는 빽할때 0으로 만들어준다고 하셨고요
다른 비슷한 강의에서는 대칭하기위에 만들어주신다고 하셨씁니다
sysout으로 일일이 찍어보니까
0으로 만들어주는 타이밍이 그때그때 다르더라구요.
7행 7열까지 가고난 이후 첫번째로 0을 대입해주던데요 아무리 재귀함수더라도
재귀함수마다 결과적으로는 board[nx][ny] =0을 거쳐야하는데 그렇지가 않습니다
한 3 4일쨰 이것만 검색하면서 하고 있는데 답답하기만 하고 이해가 안됩니다
뭔가 흐름이 이상합니다 그냥 이부분도 암기인가요? ㅠㅠ
답변 1
0
안녕하세요^^
재귀함수가 스택을 사용해서 뒤로 back track 하는 방식이 아직 정확하게 와닿지 않아서 생기는 것입니다.
섹션 8의 재귀함수 문제들을 스택과 트리를 그려가면서 연구해보고 스스로 여러번 풀어보세요.
DFS 백트랙킹에 대한 이해하는데 시간이 필요합니다. 이 강좌다 보시면 다시 이 강좌 섹션 8과 섹션 9를 스스로 여러번 풀어보세요. 문제들을 풀어보면 깨달음이 올겁니다.