강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

원재님의 프로필 이미지
원재

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2주차 개념 #5. 인접리스트(adjacency list)

수업 질문있습니다.

작성

·

7

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

using namespace std; const int V = 10;

vector<int> adj[V];

int visited[V];

void go(int idx){

cout << idx << '\n';

visited[idx] = 1;

for(int there : adj[idx]){

if(visited[there]) continue;

go(there);

}

return;

}

visited가 1로 되면서 해당 노드로 다시 가지 않는 로직을 구현한 것은 이해 했습니다.

0번 노드부터 순차적으로 n번 노드까지 가면서 노드에서 연결된 노드로 가는 로직으로 이해했습니다.

결국 for문이라는 것은 from 노드부터 to 노드까지를 반복하는 것인데, 예를 들어 1번 노드와 3번 노드가 무방향 그래프라면 1번 노드로 갔다가 다시 3번 노드로 오는 것을 막는데 visited=1을 사용하는 것으로 이해했습니다.

1번 노드의 for일 때, 1번 노드가 3번 4번과 연결되어 있다면, 1->3, 1->4의 로직이 실행될 겁니다.

제가 이해가 안 가는 것은 이 1번 노드에서 3번 노드로 가고 1번 노드에서 4번 노드로 가는 것이 1번 노드로 다시 가지 않은 것 인가에 의문이 듭니다.

사람으로 비유를 하자면 결국 1번에서 3번을 갔다면 3번에서 4번의 길이 없으면 4번으로 못가는 거 처럼요. 그럴 경우 3번에서 1번으로 돌아가고 4번으로 가야 하는 것 아닌가요? 근데 정말 이것이 1번 노드로 다시 돌아가지 않은 것인가요?

답변

답변을 기다리고 있는 질문이에요
첫번째 답변을 남겨보세요!
원재님의 프로필 이미지
원재

작성한 질문수

질문하기