【正确答案】int visited[Vnum];
int finished[Vnum];//表示对顶点i的DFS搜索是否结束
void dfs1(graph *g,int v,int &flag)
//在深度优先遍历时输出顶点号。若图中不存在环,则输出全部顶点
//号,即为有向图的顶点拓扑排序,否则将flag置为0
{
arcnode *p;
cout<<v<<" ";finished[v]=0;
visited[v]=1;
p=g→adjlist[v].firstarc;
while(p!=NULL)
{
if(visited[p→adjvex]==1 && finished[p→adjvex]==0)
flag=0;
else if(visited[p→adjvex]==0)
{
dfs1(g,p→adjvex,flag);
finished[p→adjvex]=1;
}
p=p→nextarc;
}
}
int dfs_toposort(graph *g)
{
int flag=1,i;
for(i=0;i<g→vexnum;++i)
visited[i]=0;
for(i=0;i<g→vexnum;++i)
finished[i]=1;
i=0;
while(flag==1 && i<g→vexnum)
{
if(visited[i]==0)
dfs1(g,i,flag);
else
++i; //找另一个分支继续
finished[i]=1; //标记顶点i的搜索已结束
}
return flag;
}
【答案解析】