问题
问答题
图的D搜索类似于BFS,不同之处在于使用栈代替BFS中的队列,入/出队列的操作作为入/出栈的操作,即当一个顶点的所有邻接结点被搜索后,下一个搜索出发点应该是最近入栈(栈顶)的顶点。
用邻接表作为存储结构,写一个D搜索算法; |
答案
参考答案:
解析:void D_Traverse(Graph G) { int i,v; ArcNode*arc; Stack S: int visited[vexnum]; for(i=0;i<vexnum;i++) visited[i]=0: InitStack(S): for(i=0;i<vexnum;i++) { if(!visited[i])//)如果结点i未访问 { push(S,i);//结点i入栈 while(!StackEmpty(S))// { pop(S,v); visited[v]=1: Visit(v);//出栈,将栈顶元素赋值给v for(arc=G[i].firstarc;arc!=NULL;arc=arc->nextarc) { if(!visited[arc->adjvex])//对于结点v的所有邻接结点,若未访问,就入栈 { push(S,arc->adjvex); visited[v]=1: } } } } }