第五章 图论 邻接表存图

邻接表存图

存储结构

cpp 复制代码
#define MaxSize 10
typedef char DataType;
typedef struct EdgeNode{ // 定义边表节点 
    int adjvex;
    struct EdgeNode *next; 
} EdgeNode;

typedef struct{ // 定义顶点表结点
    DataType vertex;
    EdgeNode *first;
} vertexNode;

typedef struct{
    vertexNode adjlist[MaxSize]; // 存放顶点表的数组
    int vertexNum, edgeNum; // 图的顶点数和边数
} ALGraph;

有向图邻接表的建立

cpp 复制代码
void CreateGraph(ALGraph *G, DataType a[], int n, int m){
    G->vertexNum=n, G->edgeNum=m;
    for(int i=0; i<n; i++){
        G->adjlist[i].vertex=a[i];
        G->adjlist[i].first=NULL;
    }
    for(int i=0; i<m; i++){
        int x, y;
        scanf("%d%d", &x, &y);
        EdgeNode *s=(EdgeNode*)malloc(sizeof(EdgeNode));
        s->adjvex=y;
        s->next=G->adjlist[x].first;
        G->adjlist[x].first=s;
    }
}

图的销毁

cpp 复制代码
void DestroyGraph(ALGraph *G){
    for(int i=0; i<G->vertexNum; i++){
        EdgeNode *p, *q;
        p=q=G->adjlist[i].first;
        while(p != NULL){
            p=p->next;
            free(q);
            q=p;
        }
    }
}

深度优先遍历

cpp 复制代码
void dfs(ALGraph *G, int r){
    printf("%c ", G->adjlist[r].vertex);
    st[r]=1;

    EdgeNode *p=G->adjlist[r].first;
    while(p != NULL){
        int u=p->adjvex;
        if(st[u]==0) dfs(G, u);
        p=p->next;
    }
}

广度优先遍历

cpp 复制代码
void bfs(ALGraph *G, int r){
    int Q[MaxSize];
    int front=-1, rear=-1;
    printf("%c ", G->adjlist[r].vertex);
    st[r]=1; Q[++rear]=r;

    while(front != rear){
        int u=Q[front ++];
        EdgeNode *p=G->adjlist[u].first;
        while(p != NULL){
            int v=p->adjvex;
            if(st[v]==0){
                printf("%c ", G->adjlist[v].vertex);
                st[v]=1; Q[++rear]=v;
            }
            p=p->next;
        }
    }
}
相关推荐
闻缺陷则喜何志丹13 分钟前
详细设计说明书的内容要求
算法·测试·存储
Logic10118 分钟前
C语言/数据结构位运算题解:异或XOR找出糖葫芦派对中的“独一无二山楂果数量“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
和裕18 分钟前
定制纸箱刀卡、平卡、隔档分别是什么?结构与适用场景区别全解析
大数据·运维·网络·人工智能·算法
Tisfy41 分钟前
LeetCode 3723.数位平方和的最大值:构造
数学·算法·leetcode·字符串·题解
hetao17338371 小时前
联盟场-提高组-R4 & ZYZSC-S-Round 7
c++·算法
碧海银沙音频科技研究院1 小时前
基于炬芯ATS3089X音箱的音乐播放歌词显示功能实现
人工智能·驱动开发·嵌入式硬件·算法
知识分享小能手1 小时前
C学习教程,从入门到精通,C语言数组 —— 知识点详解(8)
c语言·学习·算法
hetao17338371 小时前
联盟场-提高组-R2 & ZYZSC-S-Round 5
c++·算法
其实防守也摸鱼1 小时前
Codex 下载与本地部署实战指南
linux·服务器·前端·数据库·算法·ai
南极企鹅1 小时前
生产环境gc文件分析
java·jvm·算法