2011-04-25 6 views
0

DFS를 수행 할 때 이미 방문한 모든 노드의 목록을 보유하는 데 가장 적합한 데이터 구조는 무엇입니까? 각 노드에 고유 ID가있는 경우 이러한 고유 ID의 해시를 유지하는 것이 한 가지 방법입니다. 고유 한 ID가없는 경우 노드가 실행 가능합니까?C++에서 해싱 포인터 값

+2

포인터를'size_t'에 캐스트 할 수없는 이유는 무엇입니까? – ildjarn

+0

포인터가 고유 한 ID 자체가 아닙니다 (직렬화시 데이터와 원본 주소를 저장할 때). 따라서 역 직렬화 할 때 포인터를 새 메모리 위치에 매핑하면됩니다. –

답변

1

방문한 모든 노드를 해시 테이블에 저장하는 대신 스택에 저장하십시오. 방문한 노드를 스택에 넣으면 검색의 다른 분기를 되돌리고 쉽게 따라갈 수 있습니다. 주소가 고유 식별자되지 않을 것 이유

0

하자 생각 ...

  1. 당신이 이제까지 노드를 복사하는 경우, 그들은이 새 주소를 얻을 것이다.

  2. 노드를 해제하고 새 노드를 할당 한 경우 새로 할당 된 노드는 이전 주소를 다시 사용할 수 있습니다.

위의 내용이 적용되지 않는다고 (제 추측에 따르면 맞지 않을 수도 있습니다.) 확실하다면 바로 진행하십시오.