问答题
图的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: } } } } }
问答题
用D搜索方法搜索下图,设初始出发的结点为1,写出顶点的访问次序,当从某顶点出发搜索它的邻接点时,请按邻接点序号递增顺序搜索,以使答案唯一。
【正确答案】
【答案解析】访问的顺序为:1432765