关于严蔚敏《数据结构》习题集的一道题的解答

2025-04-19 19:22:03
推荐回答(1个)
回答1:

//又改了一遍,如有问题一起讨论
void STraverse_Nonrecursive(Graph G)//非递归遍历强连通图G
{
int visited[MAXSIZE];
InitStack(S);
Push(S,GetVex(S,1)); //将第一个顶点入栈
visit(1);
visited =1;
while(!StackEmpty(S))
{
while(Gettop(S,i)&&i)
{

for(j=FirstAdjVex(G,i);j&&visited[j];j=Nextadjvex(G,i,j));
if(!j) //邻接结点全部都访问过了
break;
visit(j);
visited[j]=1;
push(S,j);
}//while
Pop(S,j); //把该结点出栈
while(!StackEmpty(S))
{
Gettop(S,i);
for(j=Firstadjvex(G,i);j&&visited[j];j=Nextadjvex(G,i,j));
/*找与该结点邻接的未访问过的结点*/
if(j) /*找到了*/
{
push(S,j);
break;
}
else /*未找到*/
{
pop(S,j);
}
}//while
}//while
}//Straverse_Nonrecursive