首页 > 其他分享 >实现基于邻接矩阵表示的深度优先遍历

实现基于邻接矩阵表示的深度优先遍历

时间:2024-12-28 17:59:53浏览次数:9  
标签:优先 遍历 int Graph void MVNum DFS 邻接矩阵 visited

6-4 实现基于邻接矩阵表示的深度优先遍历

函数接口定义:

void DFS(Graph G, int v);

其中 G 是基于邻接矩阵存储表示的无向图,v表示遍历起点。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
#define MVNum 10
                        
int visited[MVNum];
typedef struct{ 
    char vexs[MVNum];                    
    int arcs[MVNum][MVNum]; 
    int vexnum,arcnum;             
}Graph;
 
void CreateUDN(Graph &G);//实现细节隐藏
void DFS(Graph G, int v);
void DFSTraverse(Graph G){ 
    int v;
    for(v = 0; v < G.vexnum; ++v)  visited[v] = 0;    
    for(v = 0; v < G.vexnum; ++v)
        if(!visited[v])  DFS(G, v); 
}
int main(){
    Graph G;
    CreateUDN(G);
    DFSTraverse(G);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

输入第1行为结点数vexnum和边数arcnum。第2行为结点的值,依次输入arcnum行,每行输入两个结点的值表示该两个结点互为邻接点。

8 8
ABCDEFGH
A B
A C
B D
B E
C F
C G
D H
E H

输出样例:

遍历序列。

A B D H E C F G 

QQ截图20191125133700.png

 

void DFS(Graph G, int v)
{
    visited[v]=true;
    printf("%c ", G.vexs[v]); // 访问当前顶点
    int w;
    for(w=0;w<G.vexnum;w++)
    {
        if(G.arcs[v][w]==1&&!visited[w])
          DFS(G,w); 
    }
}

标签:优先,遍历,int,Graph,void,MVNum,DFS,邻接矩阵,visited
From: https://blog.csdn.net/2401_84341430/article/details/144776037

相关文章

  • c++使用深度优先算法和广度优先算法解决迷宫问题
    求从迷宫左上角(0,0)到右下角(M-1,N-1)的路径。MxN的迷宫如下:O代表可通行,X代表不可通行。每次只能往上下左右四个方向走一步。{'O','X','X','X','X','X','X','X''O','O','O','O','O'......
  • java中Map遍历的四种方式
    java中Map遍历的四种方式|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|-------------|......
  • 【C++数据结构——图】图的遍历(头歌教学实验平台习题) 【合集】
    目录......
  • 五十八:我们需要Stream优先级
    在网络通信和数据传输中,特别是在使用HTTP/2协议时,Stream优先级的概念显得尤为重要。Stream优先级通过对不同数据流进行排序,使得网络资源能够更加高效地分配,从而提升用户体验和减少延迟。本文将探讨Stream优先级的必要性、实现方式以及其在网络通信中的应用。为什么需要Stream......
  • jquery遍历 $
    jquery遍历$.each和$(selector).each()的区别|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|----------......
  • dataframe的遍历
    for_,rowintrain_df.iterrows():print(j)breakid00007cff95d7f7974642a785aca248b0f26e60d3312fac...promptviešpoSlovensky?response_aÁno,hovorímposlovensky.Akovámmôžempom......
  • css权重优先级用来做什么的?
    CSS权重优先级在前端开发中起着至关重要的作用,它决定了当多个样式规则应用于同一个HTML元素时,哪个规则将最终生效。通过合理地设置权重优先级,开发者可以更加精确地控制页面的样式表现。以下是关于CSS权重优先级作用的详细解释:解决样式冲突:在复杂的网页中,同一个元素可能被多个CS......
  • 最短路径优先原则
    扩展配置:负载均衡:当路由器访问同一个目标且具有多条开销相似的路径(传输速度相似)时,可以让设备将流量拆分后延多条路径同时发送,已达到叠加带宽的作用。         人话:在传输数据包时,将多个数据包分多条路径传输  环回接口:路由器配置的虚拟接口,一般用于虚拟......
  • 105. 从前序与中序遍历序列构造二叉树
    题目链接解题思路:首先我们得知道人工怎么建这棵树。先序遍历[0,R1]第一个节点,就是根。然后我们在中序遍历[0,R2]找到根的位置,假如是x,那么,中序遍历中[0,x-1]就是左子树,中序遍历中[x+1,R2]就是右子树。那么先序遍历呢?左子树节点个数是x个,先序遍历是要先遍历完左子树,才能到......
  • 103. 二叉树的锯齿形层序遍历
    题目链接解题思路:和层序遍历有明显的不同。通过观察,可以得到,当前层,和下一层的顺序是「相反」的,遇到这种相反的问题,考虑用栈。本题就是用两个栈,一个栈在放入时,先放左儿子,再放右儿子,另一个栈在放入时,先放右儿子,再放左儿子。然后两个栈交替使用即可。为什么能得到这个思路?观察......