- 图的广度优先搜索(BFS)
伪代码思路:
#define MaxVertexNum 100
typedef int VertexType;
typedef int EdgeType;
typedef struct Graph {
VertexType Vex[MaxVertexNum];//顶点表
EdgeType Edge[MaxVertexNum][MaxVertexNum];//邻接矩阵,边表
int vexNum, arcNum;//图的当前顶点数和边数
};
//BFS
bool visited[MaxVertexNum];//标记访问数组
void BFS(Graph g,int v){//从顶点v出发,广度优先遍历图g
visit(v);
visited[v] = true;
Enqueue(Q,v);//入队列
while (!isEmpty(Q)){
DeQueue(Q,v);//出队列
for (w=FirstNeighbor(g,v);w>=0;w=NextNeighbor(g,v,w)) {
if(!visited[w]){
visit(w);
visited[w]= true;
Enqueue(Q,w);//入队列
}
}
}
}
void BFSTraverse(Graph g) {
for (int i = 0; i < g.vexNum; ++i) {
visited[i] = false;
}
InitQueue(&Q);//初始化辅助队列
for (int i = 0; i < g.vexNum; ++i) {
if(!visited[i]){
BFS(g,i);
}
}
}
广度优先生成树
- 图的深度优先搜索(DFS)
深度优先生成树