:: 게시판
:: 이전 게시판
|
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다. 통합 규정을 준수해 주십시오. (2015.12.25.)
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
16/10/11 23:07
리턴이 되면 호출했던 함수 아래로 다시 돌아가게 되고 저 함수의 경우에는 최단거리 찾아도 계속해서
탐색을 하게 될것 같네요. 보통은 효율성을 위해 제일 첫줄에 if (l > min) return; 같은 구문을 넣어서 비효율적인 길은 더 이상 탐색 안하도록 처리하긴 합니다.
16/10/12 00:02
말로 설명하기가 그르네요
상하좌우 이동하고 걸리는 탈출조건문에서 return 후에는 다시 이전 stack으로 돌아가서 다음 방향으로 이동합니다.
16/10/12 01:53
이거 말로 설명하기가 진짜 어렵네요 크크
재귀함수 호출이기 때문에 이전에 호출했던 dfs함수의 다음 구문이 실행됩니다. BFS랑 트리검색알고리즘을 위해서 필수로 이해하고 넘어가시면 좋습니다. 순서대로 그림을 그리면서 흐름을 따라가보는게 가장 좋다고 생각합니다. 기술면접시 칠판에다가 코딩해놓고 그런식으로 따라가면서 설명해보라고 하기도 하거든요. 그런데 이것을 깨닫는건 진짜 한순간의 번쩍임입니다 크크
16/10/12 07:37
return이 나오면 dfs 함수는 끝나는거죠. 그러니 dfs 함수를 호출했던 이전 dfs 함수 내의 다음 구문입니다. n번째 호출되는 dfs에서 return이 일어났으면 n-1번째 dfs 함수 안입니다.
예를 들면: /*생략*/ if (x > 0 && map[x - 1][y] != 0) { dfs(x - 1, y, l + 1); // Unikys: n-1번째 dfs 실행 중 n번째 dfs 함수를 호출했는데 return이 되었다면, } // 아래쪽 이동할 수 있다면 이동! // Unikys: n-1번째 dfs 함수에 여기(다음구문)부터 이어서 실행이 되는겁니다. 스택구조로 생각하시면 됩니다. if (x < n - 1 && map[x + 1][y] != 0) { dfs(x + 1, y, l + 1); } 댓글만 보고는 바로 이해하기 힘드실거고 함수가 재쉬적으로 호출되는 스택구조와 map[][]의 변화를 그려가면서 이해해보세요.
|