시작점을 스택에 두번 넣는데 한번은 필요없을거 같거든요. 아무 의미없는, 필자가 실수한거 같은데 맞나요?
void DFShowGraphVertex(ALGraph * pg, int startV)
{
Stack stack;
int visitV = startV;
int nextV;
StackInit(&stack);
VisitVertex(pg, visitV);
SPush(&stack, visitV);
while (LFirst(&(pg->adjList[visitV]), &nextV) == TRUE)
{
int visitFlag = FALSE;
if (VisitVertex(pg, nextV) == TRUE)
{
SPush(&stack, visitV);
visitV = nextV;
visitFlag = TRUE;
}
else
{
while (LNext(&(pg->adjList[visitV]), &nextV) == TRUE)
{
if (VisitVertex(pg, nextV) == TRUE)
{
SPush(&stack, visitV);
visitV = nextV;
visitFlag = TRUE;
break;
}
}
}
if (visitFlag == FALSE)
{
if (SIsEmpty(&stack) == TRUE)
break;
else
visitV = SPop(&stack);
}
}
memset(pg->visitInfo, 0, sizeof(int) * pg->numV);
}
외부 함수를 가져다 써서 제가 설명을 하면요... VisitVertex는 pg 그래프 구조체에 배열이 있는데,
매개변수로 받은 정점에 해당하는 인덱스에 '이 정점은 방문했다' 표시하는 함수구요.
SPush는 스택에 쌓는거고 SPop은 뽑는거여요. SIsEmpty는 스택이 비었나 안비었나 확인하는 것이고
LFirst와 LNext는 연결리스트를 탐색하는 함수예요. 리스트의 헤드가 더미라서 처음에는 LFirst로 탐색을 시작해야해요.
스택에 쌓이는거보니까 {0, 0, 1, 2, 3, 4......} 이런식이거든요. 그리고 스택이 비면 끝나는건데
시작점인 0은 첫 시작점의 첫 리스트탐색때 스택에 한번 쌓이면 되는거 아닌가요? 괜히 궁금해서 올려봅니다. 감사합니다. 복받으세요.
덕짤 올리는 프갤럼 오랜만...