dfs 미로탐색 질문입니다
183
작성한 질문수 14
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를 스스로 여러번 풀어보세요. 문제들을 풀어보면 깨달음이 올겁니다.
안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.
0
33
1
갑자기 채점 사이트가 바뀌었어요
0
34
1
문제 리스트 페이지
0
29
1
채점 사이트 관련 질문드립니다
0
24
1
봉우리 문제 질문입니다
0
84
2
씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?
0
65
0
이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?
0
72
0
가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법
0
67
1
좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ
0
85
2
6-7 강의에서
0
48
1
6-6. 장난꾸러기 질문 있습니다.
0
46
1
강의 수강후 코딩테스트
0
111
1
answer 변수 사용 여부
0
46
1
2중 for문
1
85
2
2-11. 임시반장정하기 (Runtime Error)
0
63
1
혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?
0
70
1
이런 풀이는 어떨까요
0
44
1
자바 스트림 방식의 효율성 질문 드립니다.
0
57
1
알고리즘 자료 구조들..
0
63
1
StringBuilder vs BufferdWriter
0
48
1
원더랜드(프림)
0
50
1
이런 코드는 어떤가요?
0
61
1
bfs 풀이
0
57
1
병합정렬
0
57
1





