void DFS(Graph G, int v) { // 算法7.5 // 从第v个顶点出发递归地深度优先遍历图G。 int w; visited[v] = true; VisitFunc(v); // 访问第v个顶点 for (w=FirstAdjVex(G, v); w!=-1; w=NextAdjVex(G, v, w)) if (!visited[w]) // 对v的尚未访问的邻接顶点w递归调用DFS DFS(G, w); }
/*深度遍历*/ int visited[MAX_VERTEX_NUM]; /* 访问标志数组(全局量),未访问标记0,访问标记1 */ void(*VisitFunc)(char* v); /* 函数变量(全局量) */ void DFS(ALGraph G,int v) { /* 从第v个顶点出发递归地深度优先遍历图G。算法7.5 */ int w; visited[v]=TRUE;/* 设置访问标志为TRUE(已访问) */ VisitFunc(v);/* 访问第v个顶点 */ for(int w=FirstAdjVex(G,G.vertices[v].data);w>0;w=NextAdjVex(G,G.vertices[v].data,G.vertices[w].data)) if(!visited[w]) DFS(G,w);/* 对v的尚未访问的邻接点w递归调用DFS */ }
void PostTraverse(SqBiTree T,int e) { // PostOrderTraverse()调用 if(T[2*e+1]!=Nil) // 左子树不空 PostTraverse(T,2*e+1); if(T[2*e+2]!=Nil) // 右子树不空 PostTraverse(T,2*e+2); VisitFunc(T[e]); }
void PreTraverse(SqBiTree T,int e) { // PreOrderTraverse()调用 VisitFunc(T[e]); if(T[2*e+1]!=Nil) // 左子树不空 PreTraverse(T,2*e+1); if(T[2*e+2]!=Nil) // 右子树不空 PreTraverse(T,2*e+2); }
/* 操作结果: 在G中删除弧<v,w> */ int i,j; ArcBox *p1,*p2; i=LocateVex(*G,v); /* 弧尾的序号 */ j=LocateVex(*G,w); /* 弧头的序号 */ if(i<0||j<0||i==j) return ERROR; p2=(*G). xlist[i].firstout; /* 将弧结点从出弧链表中删去 */ if(p2&&p2->headvex==j) /* 第1个结点为待删除结点 */ (*G). xlist[i].firstout=p2->tlink; else { while(p2&&p2->headvex!=j) /* 向后找 */ { p1=p2; p2=p2->tlink; } if(p2) /* 没到表尾 */ p1->tlink=p2->tlink; } p2=(*G). xlist[j].firstin; /* 将弧结点从入弧链表中删去 */ if(p2&&p2->tailvex==i) (*G). xlist[j].firstin=p2->hlink; else { while(p2&&p2->tailvex!=i) { p1=p2; p2=p2->hlink; } if(p2) /* 没到表尾 */ p1->hlink=p2->hlink; } if(p2->info) /* 释放弧结点 */ free(p2->info); free(p2); (*G). arcnum--; /* 弧数减1 */ return OK; } Boolean visited[MAX_VERTEX_NUM]; /* 访问标志数组 */ Status(*VisitFunc)(VertexType); /* 函数变量 */ void DFS(OLGraph G,int i) /* DFSTraverse()调用 */ { ArcBox *p; visited[i]=TRUE; /* 访问标志数组置1(已被访问) */ VisitFunc(G.xlist[i].data); /* 遍历第i个顶点 */ p=G.xlist[i].firstout; /* p指向第i个顶点的出度 */ while(p&&visited[p->headvex]) /* p没到表尾且该弧的头顶点已被访问 */ p=p->tlink; /* 查找下一个结点 */ if(p&&!visited[p->headvex]) /* 该弧的头顶点未被访问 */ DFS(G,p->headvex); /* 递归调用DFS() */ }
void DFS(MGraph G, int v) {/* 从第v个顶点出发递归地深度优先遍历图G。算法7.5 */ VertexType w1, v1; int w; visited[v] = TRUE; /* 设置访问标志为TRUE(已访问) */ VisitFunc(G.vexs[v]); //访问第v个顶点 strcpy(v1, GetVex(G, v)); for (w = FirstAdjVex(G, v1); w != -1; w = NextAdjVex(G, v1, strcpy(w1, GetVex(G, w)))) if (!visited[w]) DFS(G, w); //对v的尚未访问的序号为w的邻接顶点递归调用DFS }
/* 若w是v的最后一个邻接点,则返回-1 */ ArcNode *p; int v1,w1; v1=LocateVex(G,v); /* v1为顶点v在图G中的序号 */ w1=LocateVex(G,w); /* w1为顶点w在图G中的序号 */ p=G.vertices[v1].firstarc; while(p&&p->adjvex!=w1) /* 指针p不空且所指表结点不是w */ p=p->nextarc; if(!p||!p->nextarc) /* 没找到w或w是最后一个邻接点 */ return -1; else /* p->adjvex==w */ return p->nextarc->adjvex; /* 返回v的(相对于w的)下一个邻接顶点的序号 */ } Boolean visited[MAX_VERTEX_NUM]; /* 访问标志数组(全局量) */ void(*VisitFunc)(char* v); /* 函数变量(全局量) */ void DFS(ALGraph G,int v) { /* 从第v个顶点出发递归地深度优先遍历图G。*/ int w; VertexType v1,w1; strcpy(v1,*GetVex(G,v)); visited[v]=TRUE; /* 设置访问标志为TRUE(已访问) */ VisitFunc(G.vertices[v].data); /* 访问第v个顶点 */ for(w=FirstAdjVex(G,v1);w>=0;w=NextAdjVex(G,v1,strcpy(w1,*GetVex(G,w)))) if(!visited[w]) DFS(G,w); /* 对v的尚未访问的邻接点w递归调用DFS */ }
Status DFS( AMLGraph G , int v ) //从第v个顶点出发递归地深度优先遍历图G { int w ; visite[ v ] = TRUE ; VisitFunc( G.adjmulist[ v ].data ) ; //访问第v个顶点 for( w = FirstAdjVex( G , G.adjmulist[ v ].data ) ; w >= 0 ; w = NextAdjVex( G , G.adjmulist[ v ].data , G.adjmulist[ w ].data ) ) { if( visite[ w ] != TRUE ) DFS( G , w ) ; } return OK ; }
void DFS(AMLGraph G,int v) { int j; EBox *p; VisitFunc(G.adjmulist[v].data); visite[v]=TRUE; p=G.adjmulist[v].firstedge; while(p) { j=p->ivex==v?p->jvex:p->ivex; if(!visite[j]) DFS(G,j); p=p->ivex==v?p->ilink:p->jlink; } }
//Function use: 从第nSeqV个顶点出发深度遍历图 void DFS(MGraph G, int nSeqV) { VertexType v; VertexType w; int nSeqW; visited[nSeqV] = TRUE; VisitFunc(G.vexs[nSeqV]); strcpy(v, *GetVex(G, nSeqV)); for (nSeqW = FirstAdjVex(G, v);\ nSeqW >= 0; nSeqW = NextAdjVex(G, v, w)) { if (!visited[nSeqW]) { DFS(G, nSeqW); } } }
void DFS( AlGraph G, int v, bool visited[] ){ visited[ v ] = true; VisitFunc( v ); }