DFS深度优先搜索遍历和BFS广度优先搜索遍历
DFS深度优先搜索遍历的基本思想是:首先访问出发点v,并将其标记为已访问过,然后选取与v相邻的未被访问的任一个顶点w,并访问它;再选取与w邻接的未被访问的任一顶点并访问,以此反复进行。
BFS广度优先搜索遍历的基本思想是:首先访问起始顶点v,然后选取与v邻接的全部顶点w1、w2、...进行访问,再依次访问与w1、w2、...邻接的全部顶点(已经访问过的顶点除外),依次类推,直到全部顶点已经被访问过为止。
#include<stdio.h> void DFS(ALGraph *G,int v) //图以连接表存储,从顶点v开始遍历 { ArcNode *p; visit(v); //访问顶点v visit[v] = 1; //置已访问标记 p = G->adjlist[v].firstarc; while(p != NULL){ if(!visit[p->adjvex]) DFS(G,p->adjvex); p = p->nextarc; //p指向顶点v的下一条邻接边 } } //广度优先搜索遍历需要借助一个队列 void BFS(ALGraph *G,int v) { ArcNode *p; int que[MAXSIZE],front = 0,rear = 0; int j; Visit(v); vist[v] = 1; rear = (rear + 1) % MAXSIZE; que[rear] = v; while(front != rear){ front = (front + 1) % MAXSIZE; j = que[front]; p = G->adjlist[j].firstarc; while(p != NULL){ if(!visit[p->adjvex]){ Visit(p->adjvex); visit[p->adjvex] = 1; rear = (rear + 1) % MAXSIZE; que[rear] = p->adjvex; } p = p->nextarc; } } }