图的邻接表与邻接矩阵的-深度优先搜索(dfs)与广度优先搜索(bfs)

文章介绍了图的遍历概念,包括深度优先遍历(DFS)和广度优先遍历(BFS),并提供了C语言实现这两种遍历方法的代码示例,分别基于邻接表和邻接矩阵的数据结构。代码包括创建图、DFS和BFS的函数实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历

图的遍历方法有两种,一种叫深度优先遍历(DFS),另一种叫广度优先遍历(BFS).

图的邻接矩阵表示

通常图的表示有两种方法:邻接矩阵,邻接表。

两种方法各有各的好处。

没啥好说的直接上代码

邻接表

#include<stdio.h>
#include<stdlib.h>
#define MAX 100
#define INIFINITY 65535
int visited[MAX];    //访问标志数组 


/*邻接表结构*/
typedef char VertexType;     //顶点类型 
typedef int EdgeType;        //权值类型 
 
/*边表结点*/ 
typedef struct EdgeNode
{
    int adjvex;               //邻接点域,保存邻接点下标     
    struct EdgeNode *next;    //链域,指向下一个邻接点 
}EdgeNode;
 
typedef struct VertexNode
{
    VertexType data;           //顶点域 
    EdgeNode *firstedge;    //边表头指针    
}VertexNode,AdjList[MAX];
 
typedef struct
{
    AdjList adjList;
    int numVertexes,numEdges;    //顶点数量和边数量 
}GraphAdj; 


/*邻接表创建*/
void create(GraphAdj &G)
{
    int i,j,k;
    EdgeNode *e;
    printf("输入顶点数,边数:");
    scanf("%d%d",&G.numVertexes,&G.numEdges);
    getchar();
    //printf("%d",G->numVertexes);
    for(i=0;i<G.numVertexes;i++)          //建立顶点表 
    {
        printf("第(%d)个顶点: " ,i);
        scanf("%c",&G.adjList[i].data);
        getchar(); 
        G.adjList[i].firstedge=NULL;         //注意将边表置空 
    }
    //printf("
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值