【数据结构】【王道】5、图

1 图的遍历

1.1 广度优先搜索

算法思想:以v为起点,由近至远一次访问和v有路劲相通且路径长度为1,2,3…的点
算法:

bool visited[MAX_VERTEX_NUM];
void BFSTraverse(Graph G){
	for(int i=0;i<G.vexnum;i++)
		visited[i]=false;
	for(int i=0;i<G.vexnum;i++){
		if(!visited[i])
			BFS(G,i);
	}
}
void BFS(Graph G, int v){
	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);
			}
	}
}

1.2 深度优先搜索

算法思想:首先访问某一起始顶点v,再依次访问与v邻接的v1,与v1邻接的v2,…。直到不能再往下访问,退回到最近访问过的点,重复执行上述操作

bool visited[MAX_VERTEX_NUM];
void DFSTraverse(Graph G){
	for(int i=0;i<G.vexnum;i++)
		visited[i]=false;
	for(int i=0;i<G.vexnum;i++){
		if(!visited[i])
			DFS(G,i);
	}
}
void DFS(Graph G, int v){
	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))
				DFS(w);
	}
}

2 图的应用

上一篇:3D引擎数据结构与glTF(2): Scene Graph


下一篇:【CF】【图论】【思维】D. Maximum Diameter Graph