【正确答案】本题的算法如下:
将所有顶点置为“未访问”标志;
输出起始顶点v0;
置v0为“已访问”标志;
将v0入栈;
while(栈不空时)
{
取栈顶v;
if(v存在未被访问的邻接顶点,则选择一个顶点v1)
{
输出v1;
置v1为“已访问”标志;
将v1入栈;
}
else当前顶点退栈;
}
c语言代码如下:
void dfs1(graph g,int v)
{
int i;
arcnode *p;
int visited[Vnum],top=-1,stack[Vnum];
for(i=0;i<g.vexnum;i++)
visited[i]=0; //结点访问标志均置为0
visit(v); //访问顶点v
top++; //v入栈
stack[top]=v;
visited[v]=1;
while(top>=0) //栈不空时循环
{
v=stack[top]; --top; //取栈顶顶点
p=g.adjlist[v].firstarc;
while(p!=NULL && visited[p→adjvex]==1)
p=p→nextarc;
if(p==NULL) //若没有,退到前一个
--top;
else //若有,选择一个
{
v=p→adjvex;
visit(v); //访问顶点
visited[v]=1;
top++; //入栈
stack[top]=v;
}
}
}
【答案解析】