멘붕...
말로 설명해놓고 소스를 짜라는데
검색해도 안나오고.. 도움좀 부탁드려봅니다.
DepthFirstSearch(Origin, Destination)
{
S.Create(); //새로운 스택 만들기
Mark All Nodes as Unvisited; //일단 모든 도시를 안 가본 도시로 표시
S.Push(); //출발지를 푸시
Mark Origin as Visited; //푸시된 도시는 가본 것으로 표시
while(!S.IsEmpty() && Destination != S.GetTop())
{
if(All Adjacent Cities Are visited) //스택 탑의 인접도시가 모두 가 본 도시이면
S.Pop(); //이전 도시로 되돌아 감
else{
Select a New City C;
S.Push(C); //새로운 도시를 선택해서 푸쉬
Mark C as Visited; //그 도시를 가본 도시로 표시
}
}
if(S.IsEmpty())
return "No"; //스택이 비어서 빠져나오면
else //가는 길 없다고 대답
return "Yes"; //현재의 스택 탑이 목적지와 일치하면
} //가는 길 있다고 대답
이해안되는게
가본도시 표시하기. 재방문 회피.
백트래킹. 더이상 갈곳없을때 백트래킹 하는법.
ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
검색해도 소스가 안나오넹.
책에도 없어. 자료구조책인데 없어
가본 도시 표시하는거는 Set을 만들어서 방문한 도시 add하고 contains로 비교해도 될거같고.. 그래프를 인접행렬로 구현했으면 방문한 도시의 배열값을 뭐 다른걸로 바꾸거나 하면 안될까?? 인접 리스트면 도시 class에 방문여부를 표현하는 boolean 변수 넣으면 될거같은 기분 ㅎㅎ; 뒤로 빠꾸하는건, 스택에서 pop했으면 저 peek 역할 하는거같이 생긴 GetTop이라는 메소드가 알아서 바로 이전에 방문한 도시를 가리키는거겟지..
근데 내가 막 만들어도 되는거야? 덕지덕지 만들었다가 완성된 소스보고 \"내가 삽질했구나\" 요런적이 한두번이 아니라서;;
고마워 마킹하는법은 알겠당. 백트래킹은 좀더 생각해봐야겠어 ㅎㅎ