问题结果截图:
递归时,当遍历完所有结点后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;
}
}
没加 & 时,会复制一个 Agraph,dfs 函数里操作的是这个复制的 Agraph 对象。原始的 Agraph 对象的访问标志并没有变。