void DFS(void){
int i, x, y;
bool chk[1001] = {};
s.push(S);
while(!s.empty()){
x = s.top(); s.pop();
if(!chk[x]){
printf("%d ", x); chk[x] = 1;
for(i=graph[x].size()-1;i>=0;i--){
y = graph[x][i];
s.push(y);
}
}
}
printf("\n");
}
제가 적은 모든 코드는 https://www.acmicpc.net/source/8979733 여기서 봐주시구.
이렇게 짜면 스텍에 똑같은 수가 들어가는데, 그런 부분이 되게 마음에 안들거든요.
어떻게 고쳐야 할까요?
밑에 올린 글 참고.
간단히 말하자면 재귀호출로 구현할때 for문의 변수 i가 있는데
그걸 손으로 따라해서 구현하면 됨. 즉 배열 하나 더 선언해서 현재 어디까지 봤는지 기억해주게 하면 됨
스택에 똑같은 수 들어가는거 막으려면 visited 라는 배열 만들어서 방문했는지를 체크해주거나 아니면 그래프의 vertex 속성에 방문 여부를 추가해서 체크해야될걸여