Skip to content

[연구소문제] DFS 매개변수 질문 !! #42

Answered by YeonsangYoon
yess98 asked this question in Q&A
Discussion options

You must be logged in to vote

매개변수를 전달만 하고 사용을 안하셨네요. 이 문제는 0인 공간을 총 3개를 선택하는 조합 문제이니까
for문 시작 지점을 전달된 매개변수부터 시작해야합니다.

예를 들어 현재 (3, 4) 지점까지 실행된 dfs 호출 스택이면 그 이후로 호출되는 dfs는 (3, 5) ~ (n, m)까지만 선택해야 합니다.

하지만 2차원 배열에서 좌표를 선택하기 위해선 2중 for문을 사용해야 하는데 여기서 문제가 발생해요.
현재 호출 스택이 (3,4)여서 p = 3, q = 4이라고 하고

static void dfs(int p, int q, int idx ) {
	if(idx == 3) {
		find(); 
		return ; 
	}
	for(int i= p ; i < n ; i ++) {
		for(int j = q ; j < m ; j ++) {
			if(map[i][j] == 0 ) {
				map[i][j] = 1; 
				dfs(i, j, idx + 1); 
				map[i][j] = 0 ; 
			}
		}
	}
}

이런 식으로 해버리면 (4, 1)은 좌표들은 (3, 4)보다 뒤에 있어도 선택되지 않아요.

그래서 2중 for문을 1중 for문으로 바꿔서 int 값을 좌표값으로 변환해주면 해결됩니다.

static void dfs(int idx, int start) {
	if(idx == 3) {
		find(); 
		return

Replies: 2 comments 2 replies

Comment options

You must be logged in to vote
2 replies
@wjdgns7712
Comment options

@yess98
Comment options

yess98 Sep 2, 2021
Maintainer Author

Answer selected by yess98
Comment options

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
3 participants