代充网站怎么做网站大图怎么做更吸引客户
news/
2025/10/8 11:48:57/
文章来源:
代充网站怎么做,网站大图怎么做更吸引客户,wordpress 国内视频网站,成都vr 网站开发我们希望从图中某一顶点出发访遍图中其余顶点#xff0c;且使每一个顶点仅被访问一次。 这一过程就叫做图的遍历。 图的遍历算法是求解图的连通性问题、拓扑排序和求关键路径等算法的基础。 然而#xff0c;图的遍历要比树的遍历复杂得多。 因为图的任一顶点都可能和其余的顶…我们希望从图中某一顶点出发访遍图中其余顶点且使每一个顶点仅被访问一次。 这一过程就叫做图的遍历。 图的遍历算法是求解图的连通性问题、拓扑排序和求关键路径等算法的基础。 然而图的遍历要比树的遍历复杂得多。 因为图的任一顶点都可能和其余的顶点相邻接。 所以在访问了某个顶点之后可能沿着某条路径搜索之后又回到该顶点上。 为了避免同一顶点被访问多次在遍历图的过程中必须记下每个已访问过的顶点。 为此我们可以设一个辅助数组visited[0...n-1]它的初始值置为“假”或者零一旦访问了顶点vi便置visted[i]为“真”或者为被访问时的次序号。 通常有两条遍历图的路径深度优先搜索和广度优先搜索。 它们对于无向图和有向图都适用。 深度优先搜索 Depth First Search DFS 这种遍历类似于树的先根遍历是树的先根遍历的一种推广。 图a 是一张无向图 图b是深度优先搜索的过程 图c是广度优先搜索的过程 假设初始状态是图中所有顶点未曾被访问则深度优先搜索可从图中某个顶点v出发访问此顶点然后依次从v的未被访问的邻接点出发深度优先遍历图直至图中所有和v有路径相通的顶点都被访问到 若此图中尚有顶点未被访问则另选图中一个未曾被访问的顶点作为起点重复上述过程直至图中所有顶点都被访问为止。 为了在遍历过程中便于区分顶点是否已被访问许附设访问标志数组visited[0 ... n-1]其初值为“false”一旦某个顶点被访问则其相应的分量置为“true”。 1 Boolean visited[MAX];2 Status (*VisitFunc)(int v);3 4 void DFSTraverse(Graph G, Status(* Visit)(int v)) { //对图G作深度优先遍历5 VisitFunc Visit; //使用全局变量VisitFunc,使DFS不必设函数指针参数6 for(v0; vG.vexnum; v) visited[v] FALSE; //访问标志数组初始化7 for(v0; vG.vexnum; v)8 if(!visited[w]) DFS(G, w); //对尚未访问的顶点调用DFS9
10 }
11
12
13 void DFS(Graph G, int v) {
14 //从第v个顶点出发递归地深度优先遍历图G
15 visited[v] TRUE;
16 VisitFunc(v); //访问第v个顶点
17 for(w FirstAdjVex(G,v); w0; wNextAdjVex(G,v,w))
18 if(!visited[w]) DFS(G, w); //对尚未访问的邻接顶点w递归调用DFS
19
20 } 遍历的过程实际上是对每个顶点查找其邻接点的过程。其耗费的时间取决于所采用的存储结构。 当使用二维数组表示邻接矩阵作为图的存储结构时查找每个顶点的邻接点所需时间为O(n^2)其中n为图中顶点数。 当以邻接表作为图的存储结构时找邻接点所需时间为O(e)其中e为无向图中的边的书或有向图中弧的数。 因此当以邻接表作为存储结构时深度优先搜索遍历图的时间复杂度为O(ne)。 广度优先搜索 Breadth First Search BFS 广度优先搜索遍历类似于树的按层次遍历的过程。 假设从图中的某顶点v出发在访问了v之后依次访问v的各个未曾访问过的邻接点 然后分别从这些邻接点出发依次访问它们的邻接点并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问 直到图中所有已被访问的顶点的邻接点都被访问到。 若此时图中尚有顶点未被访问则另选图中一个未曾被访问的顶点作为起始点重复上述过程 直至图中所有顶点都被访问到为止。 换句话说广度优先搜索遍历图的过程是以v为起始点由近至远依次访问v有路径相通且路径长度为1,2...的顶点。 例如对图a进行广度优先搜索遍历图如图c所示。 和深度优先搜索类似在遍历的过程中也需要一个访问标志数组。 并且为了顺次访问路径长度为2、3、...的顶点需附设队列以存储已被访问的路径长度为1,2...的顶点。 1 void BFSTraverse(Graph G, Status(*Visit)(int v)) {2 //按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组visited3 for(v 0; vG.vexnum; v)4 visited[v] FALSE;5 InitQueue(Q); //置空辅助队列Q6 for(v 0; vG.vexnum; v)7 {8 if(!visited[v])9 {
10 visited[v] TRUE;
11 Visit(v);
12 EnQueu(Q, v) //v入队列
13 while(!QueueEmpyt(Q)) {
14 DeQueue(Q,u); //队头元素出队并置为u
15 for(w FirstAdjVex(G,u); w0; wNextAdjVex(G,u,w))
16 if(!Visited[w]) { //w为u的尚未访问的邻接顶点
17 Visited[w] TRUE;
18 Visite(w);
19 EnQueue(Q,W);
20 }
21 }
22 }
23
24 } 分析上述算法每个顶点至多进一次队列。 遍历图的过程实质上通过边或弧找邻接点的过程。 因此广度优先搜索遍历图的时间复杂度和深度优先搜索遍历相同两者不同之处仅仅在于对顶点访问的顺序不同。 转载于:https://www.cnblogs.com/grooovvve/p/10828044.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931464.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!