深度优先遍历(depth first search)类似于树的先根遍历;
关于邻接矩阵表示的深度优先遍历算法:
bool visited[vexnum]=FALSE;
void DFS(AMGraph G,int v){
printf("%c",G.ver[v]);//访问第v个顶点;
visited[v]=TRUE;//相应访问标志数组置为1;
for(i=0;i<G.vexnum;i++){
if(G.arc[v][i]==1&&visited[i]==FALSE){
DFS(AMGraph G,int i);
}//当顶点i存在且没有访问过时,递归调用访问函数;
}
return OK;
}
广度优先遍历(Breadth First Search)类似与树的按层遍;
void BFS(Graph G,int v){
printf("%c",G.ver[v]);//访问第v个顶点;
visited[v]=TRUE;
InitQueue(Q);//初始化队列;
EnQueue(Q,v);//v进队;
while(!QueueEmpty(Q)){
DeQueue(Q,u);//队头出队,赋给u;
for(w=FirstAdjVex(G,u);w=>0;w=NextAdjVex(G,u,w))
{//FirstAdjVex表示u的第一个邻接点并赋值w;NextAdjVex表示u相对于w的下一个邻接点;
if(!visited[w]){
printf("%c",G.ver[w]);//访问第w个顶点;
visited[w]=TRUE;
EnQueue(Q,w);//w进队;
}
}
}
}