无向图,深度优先遍历结果出现重复,但加&后结果无误

问题结果截图:
image.png

递归时,当遍历完所有结点后tag由1变为0,而增加&后,没有这种问题,这是为什么呢?

//这里Agraph G没有取地址
//改为Agraph &G后无问题
void dfs (Agraph G, int v) {
    printf("%c--",G.adjlist[v].data); /* 访问顶点v*/
    G.adjlist[v].tag=1; /* 顶点v 的访问标志置为1*/
    arcnode *p=G.adjlist[v].firstarc; /*p[v] 指向与顶点v 相关联的第一条边的结点*/
    while(p!=NULL){
        int w=p->adjvex; /* 读取到与v 相邻接的顶点w*/
        if(G .adjlist[w].tag==0) /* 如果顶点w 未被访问*/
            dfs(G,w); /* 从顶点w 出发,继续对G 进行深度优先遍历*/
        p=p->nextarc;
    }
}
阅读 1.7k
1 个回答

没加 & 时,会复制一个 Agraph,dfs 函数里操作的是这个复制的 Agraph 对象。原始的 Agraph 对象的访问标志并没有变。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进