图的D搜索类似于BFS 不同之处在于使用栈代替BFS中的队列 入/出队列的操作作为入/出栈的操作 即当
图的D搜索类似于BFS,不同之处在于使用栈代替BFS中的队列,入/出队列的操作作为入/出栈的操作,即当一个顶点的所有邻接结点被搜索后,下一个搜索出发点应该是最近入栈(栈顶)的顶点。
(1)用邻接表作为存储结构,写一个D搜索算法;
(2)用D搜索方法搜索下图,设初始出发的结点为1,写出顶点的访问次序,当从某顶点出发搜索它的邻接点时,请按邻接点序号递增顺序搜索,以使答案唯一。
请帮忙给出正确答案和分析,谢谢!
-
正确答案:(1)void D_Traverse(Graph G) { int iv; 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(Si);//结点i入栈 while(!StackEmpty(S))// { pop(Sv); visited[v]=1; Visit(v);//出栈将栈顶元素赋值给v for(arc=G[i].firstarc;arc!=NULL;arc=arc->nextarc) { if(!visited[arc->adjvex])//对于结点v的所有邻接结点若未访问就 入栈 { push(Sarc->adjvex); visited[v]=1; } } } } } } (2)访问的顺序为:1432765
(1)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; } } } } } } (2)访问的顺序为:1432765
