问答题 图的D-搜索类似于BFS(广度优先搜索),不同之处在于用栈代替BFS中的队列,入、出队列的操作改为入、出栈的操作,即当一个顶点的所有邻接点被搜索之后,下一个搜索出发点应该是最近入栈(栈顶)的顶点。请用邻接表作为存储结构,写一个D-搜索算法。
【正确答案】本题直接将BFS算法中的队列改为栈即可,程序代码如下: void bfs1(graph g,int V) { int stack[Vnum],top=-1; int visited[Vnum],i; arcnode *p; for(i=0;i<Vnum;++i) //赋初值 visited[i]=0; visit(v); //假设此函数已经定义,表示对v结点的访问操作 visited[v]=1; ++top; stack[top]=v; while(top>=0) { v=stack[top]; --top; p=g.adjlist[v].firstarc; while(p!=NULL) { if(!visited[p→adjvex]) { visit(p→adjvex);//访问p visited[p→adjvex]=1; ++top; stack[top]=p→adjvex; } p=p→nextarc; } } }
【答案解析】