inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

64. 경로탐색 (그래프 DFS : Depth First Search)

64번에서 ch 배열 다시 0으로 초기화 하지 않는것에 관련하여 질문 있습니다!

257

taehyun Cha

작성한 질문수 2

0


#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

int cnt = 0;

int dfs(int n,int start,  vector<vector<int> > mtrx, vector<bool> visit)//visit벡터를 콜바이 밸류로 받아오기 떄문에 값이 변하지 않음
{
    
    if (start == n)
    {
        cnt++;
    }
    else
    {
        visit[start] = true;

        for (int i = 1; i <= n; i++)
        {
            if (mtrx[start][i] == 1 && visit[i] == false)
            {
                dfs(n, i, mtrx,  visit);//이 함수를 빠져나왔을 경우 들어가기 직전의 visit 벡터를 갖고 있으므로 다시 방문하지 않았다는 표시를 해줄 필요없음
            }
        }
    }
    
    return cnt;
}

 


int main()
{
    int n, m;
    int n1, n2;

    cin >> n >> m;
    vector<bool> visit(n+1, false);//방문했던 지점인지 체크하기위해서
    vector<vector<int> > mtrx(n + 1, vector<int>(n + 1, 0));//n+1/n+1 크기의 행렬을 0으로 초기화


    for (int j = 1; j <= m; j++)
    {
        cin >> n1 >> n2;
        mtrx[n1][n2] = 1;//인접행렬 생성
    }
    
    int count = dfs(n, 1, mtrx,visit);
    cout << count;
}

.안녕하십니까 64번문제 ch[]를 초기화 하는 부분에 대한 제 생각이 맞는 생각인지 의문이 들어 질문을 남기게 되었습니다.
저는 ch배열을 전역변수로 설정하지 않고 visit 벡터로 생성하여 dfs 함수에 콜바이 밸류로 넘겨주었습니다 이 때 선생님의 코드에서는 visit벡터 즉 강의에서 ch배열을 다시 0으로 초기화 해주는 부분이 있는데 제 생각으로는 콜 바이 밸류기 때문에 dfs함수가 다시 호출될 때 visit 벡터값이 변경되어 적용되는 것이 아니므로 원래 함수로 복귀했을때는 기존은 visit 벡터를 갖고 실행된다고 생각하여 저는 방문한 정점을 다시 0으로 변경하지 않았습니다. 제 생각처럼 콜바이 밸류기 때문에 값이 변경되지 않으니 방문했던 정점을 초기화 할 필요가 없는게 맞는지 아니면 다른이유인지 궁금합니다! 정답은 모두 맞게 나옵니다!!

C++ 코테 준비 같이 해요!

답변 1

0

김태원

안녕하세요^^

네. 맞습니다. 콜바이밸류로 넘겼기 때문에 이전 함수로 백을 할 때 이전 벡터상태로 자동으로 되돌아갑니다.

만약 vector<bool> &visit 이렇게 콜바이레퍼런스로 매개변수를 만들었다면 꼭 이전함수로 백을 할 때 visit를 false로 해주어야 합니다.

테스트 케이스 질문

0

390

1

병합정렬 시간복잡도 질문

0

476

1

41.연속된 자연수의 합 문제풀이에서 수학적인 원리를 모르고 있습니다.

0

1368

2

질문드립니다.

0

392

1

질문드립니다!

0

438

1

dev 프로그램 질문

0

277

1

문제가 이해가 안되요

0

381

1

4번 나이차이 문제 접근법 질문 드립니다.

0

310

1

source file not compiled

0

1075

3

59번 질문드립니다.

0

377

1

25번 문제 질문

0

352

1

4. 나이차이 문제 질문입니다.

0

378

1

90번 라이언 킹 심바 1번 테스트 케이스

0

473

1

71번 문제 전역 변수 질문 있습니다

0

367

1

75번, 79번 priority_queue관련

1

361

1

75.최대 수입 스케줄

0

404

2

복면산 정답의 수

0

438

1

테스트 케이스에 대해서

0

452

1

수업 내용 질문입니다!

1

237

1

풀어보면 좋은 문제 목록 - 2580 스토쿠 DFS 질문입니다!!

0

848

2

12. 플로이드-와샬(그래프 최단거리) . 27:25초

0

259

1

다른 풀이 방식

0

320

1

크루스칼 vs 프림

0

316

1

숫자 총개수 small 질문있습니다.

0

246

1